ไม่ดีกว่า: พวกเขาตอบสนองความต้องการที่แตกต่างกัน ไวยากรณ์แบบสอบถามมาเป็นของตัวเองเมื่อคุณต้องการที่จะยกระดับตัวแปรหลายช่วง สิ่งนี้เกิดขึ้นในสามสถานการณ์:
- เมื่อใช้คำหลัก let
- เมื่อคุณมีเครื่องกำเนิดไฟฟ้าหลายเครื่อง ( จากคำสั่ง)
- เมื่อเข้าร่วม
นี่คือตัวอย่าง (จากตัวอย่าง 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;
เปรียบเทียบสิ่งนี้กับสิ่งเดียวกันในไวยากรณ์เมธอด:
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);
ในทางกลับกันเมธอดไวยากรณ์จะแสดงขอบเขตทั้งหมดของตัวดำเนินการคิวรีและทำให้รัดกุมมากขึ้นด้วยคิวรีแบบง่าย คุณสามารถใช้ประโยชน์จากทั้งสองโลกได้อย่างดีที่สุดโดยผสมการสืบค้นและไวยากรณ์ของวิธีการ สิ่งนี้มักจะทำในการสืบค้น LINQ ไปยัง 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 };