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