LINQ to SQL - proste pytanie

szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

Magda78 ten post 07-02-2010 20:09





Witam
Chciała bym wczytać do labeli, i Textboxów pewne wartości z zapytania SQL. Wpadłam na pomysł, że mogę sobie wyłapywać zapytaniami kolejne interesujące mnie wartości i zapisywać. Ale czy nie da się tego zrobić prościej np. że jednym zapytaniem sobie wyłapie wszystkie wartości, które mnie interesują :
   
SPDDataContext db = new SPDDataContext();
            var item = from p in db.xxxxx
                            from o in db.xxxxx
                            from t in db.xxxx
                            from s in db.xxx
                            where p.Idxxx == o.Idxxx
                            where p.Idxxx == t.Idxxx
                            where p.Idxxx == s.Idxxx
                            where o.Idxxxx=idxxx
                           
                         
                           
                            select new
                            {
                               s.imie
                               s.nazwisko
                               itp. itd.
                            }
;

I jak teraz z tego
item
kolejno wczytywać wartości do danych Lebelów czy TextBoXów?

Dzięki za pomoc
Przejdź na górę strony
cytuj
Magda78 ten post 07-02-2010 20:45





Kombinuje tak
kryptonLabel3.Text = item.ElementAtOrDefault(0).ToString();

Ale się wykrzacza!</delphi>
Przejdź na górę strony
cytuj
ozi88 ten post 07-02-2010 21:08


Użytkownik
Status: Offline
Dołączył: 01-11-2008

Jeżeli potrzebujesz odnieść się do konkretnych rekordów otrzymanych z bazy, może lepiej najpierw wynik prze-konwertuj do listy. Później za pomocą indeksu możesz dostać się do konkretnych "wierszy". Przykład:
    var db = new DataClasses1DataContext();
            var q = (from a in db.Customers
                    where a.CustomerID > 120
                    select new { a.FirstName, a.LastName }).ToList();
            Console.WriteLine(q[4].FirstName);
Przejdź na górę strony
cytuj
MSM ten post 07-02-2010 21:12
avatar

Użytkownik
Status: Offline
Dołączył: 24-04-2009
Skąd: Google Search
Ale się wykrzacza! tzn. Błąd kompilacji czy runtime? i jaki?

Wydaje mi się że "item.ElementAtOrDefault(0)" jest bez sensu, bo zwraca element na indeksie 0, albo default czyli też 0...

A takie coś zadziała?

kryptonLabel3.Text = item.ElementAt(0).imie.ToString();


I znowu mnie wyprzedzili [diabel]. W dodatku napisał mądrzej niż ja ;(
#define private public   // beware classes, I`m coming!
:D

Ostatnio zmodyfikowany: 07-02-2010 21:13 przez MSM
Przejdź na górę strony
cytuj
ne0 ten post 07-02-2010 21:58


Użytkownik
Status: Offline
Dołączył: 10-01-2008

moim zdaniem to: em.ElementAtOrDefault(0).ToString(); jest w ogóle niepotrzebne.
LINQ obecnie ma nie dopracowane kilka rzeczy, jedna z nich to zwracanie wyniku. w Twoim przypadku w item będziesz mieć najprawdopodobniej całą kolekcję danych. więc musisz najpierw wyciągnąć to co Cie interesuje robiąc coś takiego:
SPDDataContext db = new SPDDataContext();
            var item = (from p in db.xxxxx
                            from o in db.xxxxx
                            from t in db.xxxx
                            from s in db.xxx
                            where p.Idxxx == o.Idxxx
                            where p.Idxxx == t.Idxxx
                            where p.Idxxx == s.Idxxx
                            where o.Idxxxx=idxxx
                           
                         
                           
                            select new
                            {
                               s.imie
                               s.nazwisko
                               itp. itd.
                            }).asenumerable().first()


pamiętaj jeszcze o tym że jak używasz LINQ to musisz INTy konwertować.

Ostatnio zmodyfikowany: 07-02-2010 21:59 przez ne0
Przejdź na górę strony
cytuj
Magda78 ten post 07-02-2010 23:05





Tak to działa
kryptonLabel3.Text = item.ElementAt(0).imie.ToString();

Dzięki, za nim się tutaj zjawiłam sama na to wpadłam :-)

A to jeszcze mam takie pytanko, może się u mnie zdarzyć tak, że to zapytanie LINQiem nie zwróci mi wyniku, items będzie puste(w przypadku, którym jakaś relacja między tabelami nie będzie istnieć, bo nie dodałam jeszcze elementu do drugiej tabeli), a wyświetlam wynik zapytania do labela, tak:
kryptonLabel17.Text = item.Single().pomidor;
( w tym przypadku wiersz z polem pomidor nie został jeszcze utworzony)
No i wywala się kompilator :-) Da się może jakoś sprawdzić przed wyświetleniem czy moje items (zapytanie LINQ) zwróciła w ogóle jakąś wartość ?
Przejdź na górę strony
cytuj
Azarien ten post 08-02-2010 00:32
avatar

Użytkownik
Status: Offline
Dołączył: 18-12-2003

if (items!=null)
Przejdź na górę strony
cytuj
Magda78 ten post 08-02-2010 19:10





Azarien napisał:
if (items!=null)

Tak się nie da = przechodzi ten warunek nawet jeśli jest null = nie wiem czemu ale tak się dzieje. Ale udało mi się sprawdzić to dla takiego zapytania
   var item4 = from o in db.Obrona_pracies
                        from pra in db.Pracownicies
                        where o.czlonek_dod1 == pra.IdPracownika
                        where o.IdObrony == Int32.Parse(idobrony)
                        select new
                        {
                            czlonek1 = pra.tytuł_zaw_nauk + ' ' + pra.imie + ' ' + pra.nazwisko,
                        };


tak:
if (item4.Count()==1)
i faktycznie item4.Count() zwraca wynik 0 i wszystko jest ok.
Ale teraz mam takie zapytanie:
    var query5 = from item in db.Obrona_pracies
                         where item.IdObrony == Int32.Parse(idobrony)
                         select new
                         {
                             item.w_ocena_pracy,
                         };

I o dziwo gdy sprawdzam:  
   if (query5.Count() == 1) { MessageBox.Show("dalej kraszuje"); }
to przechodzi warunek. Sprawdziłem na zatrzymaniu kompilatora i pokazuje, że query5.Count() przyjmuje wartość 1. Skąd tam się bierze 1, skoro pokazuje że query5 jest null ?  Najśmieszniejsze jest to, że dla tego pierwszego zapytania item4.Count() jest zero i wszystko działa. Ktoś się orientuje, gdzie leży problem bo dla mnie to jest dziwna i nie zrozumiała sprawa
Przejdź na górę strony
cytuj
szukaj na forum nowy temat odpowiedz

Strona [ 1 ] z 1

1 użytkownik(ów) przegląda ten temat (1 gości)
(żadnych zarejestrowanych użytkowników)

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0954 sek. (zapytań SQL: 9)