2

以下のようなコードがある場合、データベースは と に対して 2 回呼び出されAnyますWhereか?

if (context.SomeTable.Any(x => x.SomeValue == "A"))
    var result = context.SomeTable.Where(x => x.SomeValue == "A")
4

2 に答える 2

3

はい、そうなると思います。

それをどのように処理したいかは、コンテキストによって異なります。たとえば、次のことが必要な場合があります。

var result = context.SomeTable
                    .Where(x => x.SomeValue == "A")
                    .Take(10)
                    .ToList();
if (result.Count == 0)
{
    // Indicate that there were no results
}
else
{
    // Use it somehow
}

しかしもちろん、これは返されるレコード数を制限するために意図的に書かれており、結果を具体化します。レコードの数がわかるまでどのパスをたどるかわからず、その時点でデータをメモリにロードしたくない場合は、さらに厄介になります。

于 2013-08-01T10:06:34.467 に答える
1

はい、2回呼び出されます。また、そのようなチェックを行う意味はありません。データがある場合は、とにかくそれらをロードする必要があります。

実際には、コードは 1 つのAnyクエリのみを実行します。2 番目のクエリはここでのみ定義され、結果を取得しようとすると実行されます。

于 2013-08-01T10:06:34.677 に答える