EDYCJA: LINQ to Objects nie zachowuje się tak, jak się spodziewałem. Być może zainteresuje Cię wpis na blogu , który właśnie o tym napisałem ...
Różnią się tym, co zostanie nazwane - pierwszy jest odpowiednikiem:
Collection.Where(x => x.Age == 10)
.Where(x => x.Name == "Fido")
.Where(x => x.Fat == true)
gdzie to ostatnie jest równoważne z:
Collection.Where(x => x.Age == 10 &&
x.Name == "Fido" &&
x.Fat == true)
Teraz, jaka to faktycznie różnica, zależy od implementacji metody Where
call. Jeśli jest to dostawca oparty na języku SQL, spodziewałbym się, że w końcu utworzą ten sam SQL. Jeśli znajduje się w LINQ to Objects, druga będzie miała mniej poziomów pośrednich (będą zaangażowane tylko dwie iteratory zamiast czterech). To, czy te poziomy pośrednictwa są istotne z punktu widzenia szybkości, to inna sprawa.
Zwykle where
użyłbym kilku klauzul, jeśli czuję, że reprezentują one znacząco różne warunki (np. Jedna dotyczy jednej części obiektu, a druga jest całkowicie oddzielna) i jednej where
klauzuli, gdy różne warunki są ściśle powiązane (np. Określona wartość jest większe niż minimum i mniejsze niż maksimum). Zasadniczo warto rozważyć czytelność przed jakąkolwiek drobną różnicą wydajności.