LINQ jest jednym z największych ulepszeń .NET od czasów generycznych i pozwala mi zaoszczędzić mnóstwo czasu i linii kodu. Jednak płynna składnia wydaje mi się bardziej naturalna niż składnia wyrażenia zapytania.
var title = entries.Where(e => e.Approved)
.OrderBy(e => e.Rating).Select(e => e.Title)
.FirstOrDefault();
var query = (from e in entries
where e.Approved
orderby e.Rating
select e.Title).FirstOrDefault();
Czy jest jakaś różnica między nimi, czy jest jakaś szczególna korzyść jednego nad drugim?
Odpowiedzi:
Nic nie jest lepsze: służą różnym potrzebom. Składnia zapytania pojawia się, gdy chcesz wykorzystać wiele zmiennych zakresu . Dzieje się tak w trzech sytuacjach:
Oto przykład (z próbek LINQPad):
Teraz porównaj to do tego samego w składni metody:
Z drugiej strony składnia metody ujawnia pełną gamę operatorów zapytań i jest bardziej zwięzła z prostymi zapytaniami. Możesz uzyskać to, co najlepsze z obu światów, łącząc składnię zapytań i metod. Często odbywa się to w zapytaniach LINQ to SQL:
źródło
Wolę używać tego drugiego (czasami nazywanego „składnią rozumienia zapytań”), gdy mogę w ten sposób napisać całe wyrażenie.
Jak tylko muszę dodać (nawiasy) i
.MethodCalls()
zmieniam.Kiedy używam tego pierwszego, zwykle umieszczam jedną klauzulę w wierszu, jak poniżej:
Uważam to za nieco łatwiejsze do odczytania.
źródło
Każdy styl ma swoje zalety i wady. Składnia zapytania jest ładniejsza, jeśli chodzi o sprzężenia i zawiera przydatne słowo kluczowe let, które ułatwia tworzenie zmiennych tymczasowych w zapytaniu.
Z drugiej strony płynna składnia ma o wiele więcej metod i operacji, które nie są ujawniane przez składnię zapytania. Ponieważ są to tylko metody rozszerzeń, możesz pisać własne.
Zauważyłem, że za każdym razem, gdy zaczynam pisać instrukcję LINQ przy użyciu składni zapytania, muszę ją umieścić w nawiasach i wracam do korzystania z płynnych metod rozszerzenia LINQ. Składnia zapytania po prostu nie ma wystarczającej liczby funkcji do samodzielnego użycia.
źródło
W VB.NET bardzo wolę składnię zapytań.
Nienawidzę powtarzać brzydkiego słowa kluczowego
Function
:To miłe zapytanie jest moim zdaniem znacznie bardziej czytelne i łatwe do utrzymania:
Składnia zapytań VB.NET jest również potężniejsza i mniej szczegółowa niż w języku C #: https://stackoverflow.com/a/6515130/284240
Na przykład to zapytanie LINQ do DataSet (Objects)
VB.NET:
DO#:
źródło
W ogóle nie otrzymuję składni zapytania. Po prostu nie mam na to żadnego powodu. let można uzyskać za pomocą .Select i typów anonimowych. Po prostu myślę, że rzeczy wyglądają na znacznie lepiej zorganizowane z „interpunkcją”.
źródło
Płynny interfejs, jeśli tylko gdzieś. Jeśli potrzebuję polecenia select lub orderby, zazwyczaj używam składni zapytania.
źródło
Płynna składnia wydaje się być naprawdę potężniejsza, powinna również lepiej działać, organizując kod w małe metody wielokrotnego użytku.
źródło
Wiem, że to pytanie jest oznaczone C #, ale płynna składnia jest boleśnie wyczerpująca w VB.NET.
źródło
Bardzo podoba mi się płynna składnia i staram się jej używać tam, gdzie mogę, ale w niektórych przypadkach, na przykład, gdy używam złączeń, zwykle wolę składnię zapytania, w takich przypadkach łatwiej mi ją czytać i myślę, że niektórzy ludzie są bardziej zaznajomieni ze składnią zapytania (podobną do SQL) niż lambdas.
źródło
Rozumiem i podoba mi się płynny format, ale na razie trzymałem się Query ze względu na czytelność. Ludzie, którzy dopiero zapoznają się z LINQ, uznają Zapytanie za bardziej wygodne do czytania.
źródło
Wolę składnię zapytań, ponieważ pochodzę z tradycyjnego programowania WWW przy użyciu SQL. O wiele łatwiej jest mi owinąć głowę. Jednak wydaje mi się, że zacznę korzystać z .here (lambda), ponieważ jest zdecydowanie krótszy.
źródło
Używam Linq od około 6 miesięcy. Kiedy zacząłem go używać, wolałem składnię zapytania, ponieważ jest ona bardzo podobna do T-SQL.
Ale stopniowo przechodzę do tego pierwszego, ponieważ łatwo jest pisać fragmenty kodu wielokrotnego użytku jako metody rozszerzenia i po prostu połączyć je w całość. Chociaż uważam, że umieszczenie każdej klauzuli w osobnym wierszu bardzo pomaga w czytelności.
źródło
Właśnie ustaliłem standardy naszej firmy i egzekwujemy stosowanie metod rozszerzenia. Myślę, że dobrym pomysłem jest wybranie jednego z drugiego i nie mieszanie ich w kodzie. Metody rozszerzeń czytają podobnie jak inny kod.
W składni rozumienia nie ma wszystkich operatorów i używanie nawiasów wokół zapytania i dodawanie metod rozszerzenia po prostu prosi mnie o użycie metod rozszerzenia od samego początku.
Ale w przeważającej części jest to tylko osobiste preferencje z kilkoma wyjątkami.
źródło