3

データベースからいくつかの項目を選択する必要があります。アイテムの ID はList.

ここでの回答で、Jon Skeet は、使用する可能性があると述べていますContains()

var foo = channel.AsQueryable<CodeData>()
                 .Where(codeData => codeIDs.Contains(codeData.CodeId));

データベースが巨大で、ID リストが非常に小さい状況では、どのように機能しますか?

LinqINは SQL で句を使用するのに十分スマートですか?

編集: DataContext と SQL Server 2008 を使用しています

4

1 に答える 1

7

はい、LINQ 2 SQL はINこのシナリオで句を使用します。

しかし、それは「スマート」であり、巨大な DB と小さな ID リストがあることを検出するためではありません。

句は、INLINQ 2 SQL が SQL で表現する方法を「認識」する方法List.Containsです。


実際、1000 個の項目のリストがある場合IN、1000 個のパラメーターを持つ句が表示されます。

2100 を超える ID のリストがある場合、コマンドで 2100 を超えるパラメーターを許可しないという SQL クライアントの制限にヒットします。しかし、LINQ 2 SQL は、たとえば 5000 個のパラメーターを持つコマンドを喜んで生成します。

于 2012-11-26T12:07:29.253 に答える