Il n'est ni mieux: ils répondent à différents besoins. La syntaxe de la requête vient dans son propre lorsque vous voulez bénéficier de multiples variables de portée. Ce qui se passe dans trois situations:
- Lorsque vous utilisez le mot-clé let
- Lorsque vous avez plusieurs générateurs (de clauses)
- Quand vous faites des jointures
Voici un exemple (à partir de la LINQPad échantillons):
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;
Maintenant comparez cela à la même chose dans la méthode de la syntaxe:
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);
La syntaxe de méthode, d'autre part, expose l'ensemble des opérateurs de requête et est plus concis avec des requêtes simples. Vous pouvez obtenir le meilleur des deux mondes en mélangeant de la requête et de la méthode de la syntaxe. Cela est souvent fait dans LINQ to SQL des requêtes:
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 };