LINQ to SQL - proste pytanie
Strona [ 1 ] z 1
| Magda78 |
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 |
|
|
| Magda78 |
07-02-2010 20:45 |
|
|
Kombinuje tak kryptonLabel3.Text = item.ElementAtOrDefault(0).ToString(); Ale się wykrzacza!</delphi> |
|
|
| ozi88 |
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: |
|
|
| MSM |
07-02-2010 21:12 |
|
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 . W dodatku napisał mądrzej niż ja ![]() #define private public // beware classes, I`m coming! ![]() Ostatnio zmodyfikowany: 07-02-2010 21:13 przez MSM |
|
|
| ne0 |
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 |
|
|
| Magda78 |
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ść ?
|
|
|
| Azarien |
08-02-2010 00:32 |
|
Użytkownik Status: Offline Dołączył: 18-12-2003 |
|
|
|
| Magda78 |
08-02-2010 19:10 |
|
|
Azarien napisał: 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: 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: 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 |
|
|
|
|
|
Strona [ 1 ] z 1
| 1 użytkownik(ów) przegląda ten temat (1 gości) |
|---|
| (żadnych zarejestrowanych użytkowników) |










. W dodatku napisał mądrzej niż ja 
