3

我必须从数据库中选择一些项目。项目的 ID 在List.

在这里的回答中,Jon Skeet 指出我们可能会使用Contains()

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

在数据库很大而 ID 列表很小的情况下,它的表现如何?

Linq 是否足够聪明,可以IN在 SQL 中使用该子句?

编辑:我正在使用 DataContext 和 SQL Server 2008

4

1 回答 1

7

是的,LINQ 2 SQL 将IN在这种情况下使用该子句。

但不是因为它是“智能的”并且检测到你有一个巨大的数据库和一个小的 id 列表。

IN子句是 LINQ 2 SQL 如何“知道”List.Contains在 SQL 中表达的。


事实上,如果您有一个包含 1000 个项目的列表,您会看到一个IN包含 1000 个参数的子句。

如果您有超过 2100 个 id 的列表,您将遇到 SQL 客户端中的限制,即命令中不允许超过 2100 个参数。但是 LINQ 2 SQL 会很高兴地生成一个命令,例如,它甚至有 5000 个参数。

于 2012-11-26T12:07:29.253 回答