2017-09-06 64 views
8

Có đúng không khi gọi đoạn mã này LINQ (Ngôn ngữ được tích hợp Truy vấn)?Chuỗi phương pháp có thể được gọi là LINQ không?

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

Tôi đang bối rối vì System.Linq là bắt buộc cho mã này.
Tuy nhiên, khi tôi nhìn thấy các câu hỏi và câu trả lời giống như sau: .NET LINQ query syntax vs method chain , thì họ đang nói rõ ràng về một chuỗi phương pháp chứ không phải LINQ.

+2

Nó vẫn là LINQ, không phải là "cú pháp truy vấn". – Kobi

+0

@Kobi Cảm ơn bạn! – MaxPower

+4

LINQ chỉ là một loạt các phương thức hoạt động trên các bộ sưu tập các mục tương tự như một ngôn ngữ dựa trên truy vấn như SQL. Cả hai, cú pháp truy vấn và các chuỗi phương thức mà bạn đã cung cấp thực sự là các phương thức linq từ không gian tên đó, chúng chỉ khác nhau về cú pháp chứ không phải trong hành vi. – HimBromBeere

Trả lời

11

LINQ có thể được viết theo hai cách khác nhau.
Một là bằng cách viết một truy vấn sử dụng LINQ cú pháp truy vấn khai báo:

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

Và kia là bằng cách sử dụng phương pháp khuyến nông LINQ của:

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

Cả hai truy vấn được giống hệt nhau và sẽ tạo ra kết quả tương tự (cũng , lỗi trình biên dịch trong ví dụ quá đơn giản này nhưng đó là suy nghĩ đếm :-))

Trình biên dịch C# dịch truy vấn vào các cuộc gọi phương thức.
Điều này có nghĩa là mọi thứ bạn viết dưới dạng truy vấn cũng có thể được viết bằng chuỗi phương pháp. Tuy nhiên, xin lưu ý rằng điều ngược lại là sai - Một số truy vấn chỉ có thể được viết bằng các phương thức mở rộng của LINQ.

Để đọc thêm, here's what Microsoft have to say about it.

Lưu ý thứ hai bắt đầu đoạn với điều này:

cú pháp truy vấn và cú pháp phương pháp ngữ nghĩa giống hệt nhau, nhưng nhiều người tìm cú pháp truy vấn đơn giản hơn và dễ đọc hơn.

btw, nếu chưa rõ, lý do mà cú pháp chaining phương pháp cũng là do phương pháp mở rộng LINQ thuộc về không gian tên này.

Các vấn đề liên quan