Tidak ada yang lebih baik: mereka melayani kebutuhan yang berbeda. Sintaks kueri muncul dengan sendirinya saat Anda ingin memanfaatkan berbagai variabel rentang . Ini terjadi dalam tiga situasi:
- Saat menggunakan kata kunci let
- Ketika Anda memiliki beberapa generator ( dari klausa)
- Ketika melakukan bergabung
Berikut ini sebuah contoh (dari sampel 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;
Sekarang bandingkan ini dengan hal yang sama dalam sintaks metode:
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);
Sintaks metode, di sisi lain, memperlihatkan keseluruhan penuh operator kueri dan lebih ringkas dengan kueri sederhana. Anda bisa mendapatkan yang terbaik dari kedua dunia dengan mencampur sintaks kueri dan metode. Ini sering dilakukan dalam permintaan 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 };