Zastanawiam się, czy istnieją implikacje wydajności wielu instrukcji .Where(). Na przykład można napisać:Czy wiele instrukcji .Where() w LINQ jest problemem z wydajnością?
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
)
);
Lub alternatywnie mogę połączyć je wszystkie w jednym przypadku() klauzuli, tak:
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
)
);
Czy łańcuch gdzie() klauzule zranić wydajności lub są są równoważne?
myślę LINQ kompiluje zarówno do podobnej ekspresji, niezależnie od tego, jak go zbudować (o ile nie nazwiesz ToList() lub sortowania gdzieś pomiędzy "Gdzie jest" – sinelaw