LinqtoSQL的where子句包含List?

时间:2010-10-16 14:13:39

标签: linq-to-sql linq-to-objects

我已经研究过这个死亡。这里似乎确实有一些答案,但坦率地说,这些答案让我感到困惑。所以我会尽量使它尽可能基本。

如果我在数据库中有一个表,“People”有一个名称列(字符串)和一个age(int)列。然后我做这样的事情:

List<int> ages = new List<int>();
ages.Add(39);
ages.Add(40);
var result = from p in People
where ages.Contains((int)p.Age)
select p;

语法正在传递,但没有返回任何内容(VS2010和LinqPad中都有)。这不应该使用包含列表中年龄的where子句的SQL语句吗?

简单回答任何人? (理想情况下,如果您可以修改我的示例并使其正常工作......那就太棒了!)

1 个答案:

答案 0 :(得分:2)

如果您使用的是Linq2SQL,则表明您正在正确执行此操作以确保对SQL Server进行正确的预测。您可以尝试以稍微不同的方式编写它,例如:

var result = from p in People
where ages.Select(a => a).Contains(p.Age)
select p;

你说它什么都不返回。您确定要返回匹配的记录吗?另外,你在任何地方使用result吗?如果您不将其绑定到某个内容或将ToList()调用到其他某个投影交互,则不会执行该查询。

评论样本:

var ints = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var Merchandiser = (new DataClasses1DataContext()).Merchandisers;

var result = from m in Merchandiser 
where ints.Contains(m.Id) 
select m; 

foreach (var item in result) 
{ 
   Console.WriteLine(item.Name); 
} 

Console.ReadLine();