23

複数の .Where() ステートメントのパフォーマンスへの影響があるかどうか疑問に思っています。たとえば、次のように書くことができます。

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
                )
        );

または、次のように、それらすべてを 1 つの Where() 句に結合することもできます。

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
                )
        );

Where() 句のチェーンはパフォーマンスに悪影響を及ぼしますか、それとも同等ですか?

4

1 に答える 1

24

LINQ to Objects では、基本的にイテレータ チェーンが長くなるため、パフォーマンス ヒットはごくわずかです。

LINQ to SQL および同様のプロバイダーでは、どちらの方法でも同じ SQL が生成されると予想されるため、そこでのパフォーマンスには影響しません。

編集:これを書いてから、LINQ to Objects の実装についてもう少し知りました -もう少し複雑です...

于 2011-01-19T13:05:33.560 に答える