2017-09-06 68 views
8

Czy to jest prawidłowe wywołanie tego fragmentu kodu LINQ (Język Zintegrowany Zapytanie)?Czy łańcuch metod można nazwać LINQ?

var lstMyStrings = new List<string>(); 
lstMyStrings.Where(aX => string.IsNullOrEmpty(aX)) 
      .Skip(3) 
      .ToList(); 

jestem zdezorientowany bo System.Linq jest obowiązkowe dla tego kodu.
Jednak, gdy widzę pytania i odpowiedzi w następujący sposób: .NET LINQ query syntax vs method chain , wtedy mówią one wyraźnie o łańcuchu metod, a nie LINQ.

+2

To wciąż LINQ, po prostu nie jest "składnią zapytania". – Kobi

+0

@Kobi Dziękuję! – MaxPower

+4

Linq to tylko kilka metod, które działają na kolekcjach elementów podobnych do języka opartego na zapytaniach, takiego jak SQL. Zarówno składnia zapytania, jak i łańcuchy metod, które podałeś, są w rzeczywistości metodami linq z tej przestrzeni nazw, różnią się tylko składnią, a nie zachowaniem. – HimBromBeere

Odpowiedz

11

LINQ można zapisać na dwa różne sposoby.
Jedno jest pisanie kwerendy przy użyciu LINQ deklaratywna składnia zapytania:

var query = from x in source 
      where condition 
      select x.Property 

a druga jest za pomocą LINQ Metody rozszerzenia:

var query = source.Where(condition).Select(x => x.Property); 

Obie zapytań są identyczne i będzie produkować ten sam wynik (dobrze , błąd kompilatora w tym uproszczonym przykładzie, ale liczy się myśl :-))

Kompilator C# tłumaczy zapytanie na wywołania metod.
Oznacza to, że wszystko, co napiszesz jako zapytanie, można również napisać przy użyciu łańcuchów metod. Należy jednak pamiętać, że przeciwieństwem jest fałsz - niektóre zapytania mogą być pisane tylko za pomocą metod rozszerzenia Linq.

Dla dalszego czytania, here's what Microsoft have to say about it.

Note drugi rozpoczyna akapit w tym:

składnia zapytań i składnia metody są semantycznie identyczne, ale wiele osób uważa, składnia zapytań prostsze i łatwiejsze do odczytania.

btw, jeśli was'nt już jasne, że powodem jest obowiązkowe dla System.Linq składnia łańcuchowym metoda jest również dlatego, że rozszerzenie metod LINQ należący do tej przestrzeni nazw.