Używam LINQ do SQL do obsługi zapytań do bazy danych dla aplikacji, nad którą pracuję.Automatyczne sprawdzanie relacji NULL z zapytaniami LINQ
Dla celów tego przykładu, wyobraźmy sobie mam kilka tabel jak tak
- Company
- Product
- Item
- Order
i pozwala powiedzieć Company
ma 0 lub więcej Products
, A Product
ma 0 lub więcej Items
, i Item
ma wartość 0 lub więcej Orders
.
Teraz pozwala więc uzyskaliśmy listę Orders
, coś jak:
IQueryable<Order> myOrders = GetMyOrders();
Teraz powiedzmy, że chcę zapytać rozkazy dla konkretnego Company.Name
, ale do czynienia z sytuacją, gdzie każda tabela rodzic ID może być NULL
(wiem, to nie wydaje się logiczne z moich przykładowych danych, ale jest to tylko przykład)
przy założeniu, że nie ma NULL
identyfikatory rodzic mógłby zrobić to:
var filteredOrders = myOrders.Where(x => x.Item.Product.Company.Name == "Company1");
Mogłoby to jednak działać dobrze, ponieważ mogą istnieć wartości identyfikatorów nadrzędnych NULL
, należy sprawdzić każdy obiekt nadrzędny, aby upewnić się, że nie jest on null
przed wysłaniem zapytania do następnego elementu nadrzędnego (w przeciwnym razie otrzymam wyjątek). Więc zrób coś takiego:
var filteredOrders = myOrders.Where(x =>
x.Item != null &&
x.Item.Product != null &&
x.Item.Product.Company != null &&
x.Item.Product.Company.Name == "Company1");
więc moje pytanie: Czy istnieje lepszy sposób (pod względem czytelności i łatwości Coding), aby to zrobić niż konieczności obejmować wszystkie kontrole zerowe? Dowolni rodzice o zerowym napotkaniu po drodze powinni spowodować wykluczenie z wynikowej listy.
proszę żadne sugestie dotyczące zapobiegania zerowe rodziców, baza danych nie będzie zmianę (i jest całkowicie poprawny w każdym razie)
Lepsze, jak w bardziej wydajnych? Nie sądzę. Nie mogę nawet myśleć, że możesz pozbyć się tych wszystkich "zerowych" czeków. Lepsze co do ładniejszego kodu? Pójdę z sugestią Lonli-Lokli. – InBetween
@InBetween: Przepraszam, kiedy mówię lepiej, miałem na myśli więcej dla czytelności. Ale pamiętaj o moim komentarzu do posta Lonli-Lokli, gdzie wspomniałem o tym, że ostatecznie powinien on być uruchamiany jako zapytanie SQL i nie zwracać najpierw wszystkich wyników. – musefan
Brzmi jak idealna aplikacja do wewnętrznego łączenia, która eliminuje wszystkie elementy z zerowymi odniesieniami . Dołącz do wszystkich tabel i filtruj wyniki według nazwy firmy. (Ale to nie będzie bardziej czytelne) – Stephan