Ни то, ни другое лучше: они служат различным потребностям. Синтаксис запроса вступает в свои права, когда вы хотите использовать несколько переменных диапазона . Это происходит в трех ситуациях:
- При использовании ключевого слова 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 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 };