Không phải là tốt hơn: họ phục vụ các nhu cầu khác nhau. Cú pháp truy vấn xuất hiện khi bạn muốn tận dụng nhiều biến phạm vi . Điều này xảy ra trong ba tình huống:
- Khi sử dụng từ khóa let
- Khi bạn có nhiều máy phát điện ( từ mệnh đề)
- Khi tham gia
Đây là một ví dụ (từ các mẫu LINQPad):
string[] fullNames = { "Anne Williams", "John Fred Smith", "Sue Green" };
var query =
from fullName in fullNames
from name in fullName.Split()
orderby fullName, name
select name + " came from " + fullName;
Bây giờ so sánh điều này với điều tương tự trong cú pháp phương thức:
var query = fullNames
.SelectMany (fName => fName.Split().Select (name => new { name, fName } ))
.OrderBy (x => x.fName)
.ThenBy (x => x.name)
.Select (x => x.name + " came from " + x.fName);
Mặt khác, cú pháp phương thức hiển thị toàn bộ gam của toán tử truy vấn và ngắn gọn hơn với các truy vấn đơn giản. Bạn có thể tận dụng tốt nhất cả hai thế giới bằng cách trộn cú pháp truy vấn và phương thức. Điều này thường được thực hiện trong các truy vấn LINQ to SQL:
var query =
from c in db.Customers
let totalSpend = c.Purchases.Sum (p => p.Price) // Method syntax here
where totalSpend > 1000
from p in c.Purchases
select new { p.Description, totalSpend, c.Address.State };