Stary post i to w dużej mierze na podstawie opinii, ale tu jest inny uwagę nie wymienione powyżej:
SingleOrDefault
klauzula nie może być a następnie inne warunki, takie jak Select
, ponieważ, jak zauważa Patel powyżej, faktycznie wykonuje zapytanie. Na przykład powiedzieć w dół drogi chcesz zmodyfikować kwerendę, aby powrócić tylko nazwisko klienta:
this.Storage.Customer.OfType<Preferred>()
.Include(b => b.Order)
.SingleOrDefault(cust => cust.Id == customerId && cust.CustomerType == (int)cusType)
.Select(cust=>cust.Name); //compile error
nie będzie działać, a nie można przenieść do klauzuli Select
przed SingleOrDefault
bo wtedy Id
i CustomerType
pola nie będą widoczne dla wyrażenia lambda w SingleOrDefault
. Zamiast tego trzeba by włożyć z powrotem klauzuli Where
pierwszy:
this.Storage.Customer.OfType<Preferred>()
.Include(b => b.Order)
.Where(cust => cust.Id == customerId && cust.CustomerType == (int)cusType)
.Select(cust=>cust.Name)
.SingleOrDefault();
Zatem ponieważ klauzula Where
często jest konieczne i zawsze co najmniej tak dobre wyniki, to prawdopodobnie dobra praktyka, aby zawsze używać go do konsystencji, czytelność, i łatwość konserwacji.
Wygenerowane zapytanie "SQL" będzie takie samo, więc powiedziałbym, że to tylko Twoja opinia, która jest lepsza. – MarcinJuraszek
Drugi jest krótszy i nadal łatwy do odczytania. –
Myślę, że pierwszy postępuje zgodnie z kodem krok po kroku i jest łatwiejsze do rozwinięcia/debugowania. –