使用List.Contain()时Linq to SQL如何执行?

时间:2012-11-26 11:56:45

标签: c# linq linq-to-sql

我必须从数据库中选择一些项目。这些项目的ID位于List

在回答here中,Jon Skeet声明我们可能会使用Contains()

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

在数据库庞大且ID列表非常小的环境中,它的表现如何?

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

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

1 个答案:

答案 0 :(得分:7)

是的,LINQ 2 SQL将在此方案中使用IN子句。

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

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


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

如果您有超过2100个ID的列表,那么您将在SQL客户端中遇到限制,该限制不允许在命令上使用超过2100个参数。但LINQ 2 SQL很乐意生成一个命令,例如,甚至有5000个参数。