Linq包含运算符

时间:2011-08-10 11:33:33

标签: c# asp.net linq contains

这很好用:

var q = (from c in db.tblLiteCategorySpecs where CategoryIDs.Contains(c.CategoryID) select c.SpecID).Distinct().ToList();
var qq = (from s in db.tblSpecifications where q.Contains(s.id) select s);

但是我现在需要在第一个查询中返回另一个字段:

var q = (from c in db.tblLiteCategorySpecs where CategoryIDs.Contains(c.CategoryID) select new { c.SpecID, c.FriendlyName }).Distinct().ToList();
var qq = (from s in db.tblSpecifications where q.Contains(s.id) select s);

所以q.contains现在失败了,我需要以某种方式处理q查询SpecID字段。有谁知道怎么做?

2 个答案:

答案 0 :(得分:7)

嗯,你可以尝试

var qq = from s in db.tblSpecifications
         where q.Select(x => x.SpecID).Contains(s.id)
         select s;

换句话说,在使用Contains之前投影结果。我不知道SQL会是什么样子。

顺便说一句,我个人只是把它写成:

var qq = db.tblSpecifications
           .Where(s => q.Select(x => x.SpecID).Contains(s.id));

我只使用查询表达式语法,它确实使事情更简单。我还强烈建议您使用多行进行查询 - 这对于可读性非常有帮助。

答案 1 :(得分:1)

这是你想要的吗?

var q = (from c in db.tblLiteCategorySpecs where CategoryIDs.Contains(c.CategoryID) select new { c.SpecID, c.FriendlyName }).Distinct().ToList();
var qq = (from s in db.tblSpecifications where q.Any(c => c.SpecID == s.id) select s);