Wiem, że to jest Linq:
var _Results = from item in _List
where item.Value == 1
select item;
Wiem, że to jest Lambda:
var _Results = _List.Where(x => x.Value == 1);
Uwaga redaktora: powyższe to nie tylko Lambda, to Linq używający "Method Syntax", którego predykatem jest Lambda. Żeby było jasne, obie powyższe próbki to Linq (mój oryginalny post był niepoprawny, ale zostawiłem błąd, aby zilustrować zamieszanie, które spowodowało pytanie).
Ale czy Linq jest podzbiorem Lambda, czy co?
Dlaczego istnieją dwie pozornie identyczne technologie?
Czy istnieje techniczny powód, aby wybrać jedną z nich?
Odpowiedzi:
To jest LINQ (przy użyciu składni zapytania):
To także LINQ (przy użyciu składni metody):
Warto zauważyć, że oba te smaki ostatecznie utworzą dokładnie ten sam kod. Kompilator oferuje usługę, umożliwiając wyrażanie życzeń w preferowany sposób.
A to jest lambda:
Gdy zdecydujesz się użyć składni metody, LINQ jest prawie zawsze widoczny wokół wyrażeń lambda. Ale LINQ i lambdy to dwie zupełnie różne rzeczy, z których obie mogą być używane samodzielnie.
Aktualizacja: Jak słusznie wskazuje svick, LINQ ze składnią zapytań jest również zaimplementowany przy użyciu wyrażeń lambda (jak wspomniano wcześniej, kompilator umożliwia pisanie w składni zapytania, ale skutecznie przekształca ją na składnię metody za plecami). Jest to po prostu piętrzą się na fakcie, że oba smaki są całkowicie równoważne i będą zachowywać się w ten sam sposób (np. Wyrażenia lambda mogą powodować tworzenie domknięć ).
źródło
Obie są Linq. Drugi jest przy użyciu lambda .
Lambdy to elementy typu wbudowanego, które przekazujesz jako parametr do funkcji Where w drugim przykładzie.
Różnica między tymi dwiema składniami jest czysto składniowa. Drugim stylem linq używającym wywołań metod jest to, jak działa pod maską. Pierwsza ma być bardziej przyjazna dla użytkownika / łatwiejsza, a kompilator konwertuje ją na wywołania metod zakulisowe. Powinny działać tak samo dla każdego zapytania, chociaż oczywiście kompilator może wybrać nieco inną interpretację skomplikowanego zapytania linq niż przy konwersji na styl metody.
Ten artykuł msdn może być również interesujący: Składnia zapytania LINQ a składnia metody . Szczególnie istotne jest: „Ogólnie zalecamy składnię zapytań, ponieważ jest ona zwykle prostsza i bardziej czytelna; jednak nie ma semantycznej różnicy między składnią metody a składnią zapytania”.
źródło