Ninguno de los dos es mejor: atienden diferentes necesidades. La sintaxis de la consulta tiene su propio significado cuando desea aprovechar múltiples variables de rango . Esto sucede en tres situaciones:
- Cuando se usa la palabra clave let
- Cuando tienes múltiples generadores ( de cláusulas)
- Al hacer uniones
Aquí hay un ejemplo (de las muestras de 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;
Ahora compare esto con lo mismo en la sintaxis del método:
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 sintaxis del método, por otro lado, expone la gama completa de operadores de consulta y es más concisa con consultas simples. Puede obtener lo mejor de ambos mundos combinando la sintaxis de consulta y método. Esto a menudo se realiza en consultas 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 };