这很好用:
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
字段。有谁知道怎么做?
答案 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);