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

Jon*_*nas 3 c# linq linq-to-sql

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

这里的答案中,Jon Skeet表示我们可能会使用Contains()

var foo = channel.AsQueryable<CodeData>()
                 .Where(codeData => codeIDs.Contains(codeData.CodeId));
Run Code Online (Sandbox Code Playgroud)

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

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

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

Cri*_*scu 7

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

但不是因为它"聪明"并且检测到你有一个巨大的数据库和一个小的ID列表.

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


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

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