c# - query - ¿Hay varias declaraciones.Where() en LINQ un problema de rendimiento?
linq performance tips (1)
En LINQ to Objects, habrá un impacto muy pequeño en el rendimiento, porque básicamente la cadena de iteradores será más larga: obtener el siguiente elemento significa subir una larga cadena de llamadas MoveNext ().
En LINQ to SQL y proveedores similares, esperaría que el mismo SQL se genere de cualquier manera, por lo que no afectaría el rendimiento allí.
EDITAR: Desde que escribí esto, he descubierto un poco más sobre la implementación de LINQ to Objects: es un poco más complicado ...
Me pregunto si hay implicaciones de rendimiento de varias declaraciones .Where (). Por ejemplo podría escribir:
var contracts = Context.Contract
.Where(
c1 =>
c1.EmployeeId == employeeId
)
.Where(
c1 =>
!Context.Contract.Any(
c2 =>
c2.EmployeeId == employeeId
&& c1.StoreId == c2.StoreId
&& SqlFunctions.DateDiff("day", c2.TerminationDate.Value, c1.DateOfHire.Value) == 1
)
)
.Where(
c1 =>
!Context.EmployeeTask.Any(
t =>
t.ContractId == c1.Id
)
);
O, alternativamente, podría combinarlos todos en la única cláusula Where (), así:
var contracts = Context.Contract
.Where(
c1 =>
c1.EmployeeId == employeeId
&& !Context.Contract.Any(
c2 =>
c2.EmployeeId == employeeId
&& c1.StoreId == c2.StoreId
&& SqlFunctions.DateDiff("day", c2.TerminationDate.Value, c1.DateOfHire.Value) == 1
)
&& !Context.Employee_Task.Any(
t =>
t.ContractId == c1.Id
)
);
¿La cadena de cláusulas Where () perjudica el rendimiento o son equivalentes?