我试图将以下MySQL语句转换为LINQ查询格式
SELECT * FROM table1 WHERE table1.id IN (SELECT c_id FROM table2 WHERE a_id IN (1, 49) GROUP BY c_id HAVING COUNT(*) = 2) ORDER BY name
得到了这个,但我在如何处理IN和第二个SELECT语句上画了一个空白
myItems = from c in table1
let id = c.id
where ????
orderby c.name
select c;
请欣赏一些指导
答案 0 :(得分:2)
试试这个:
var ids=new[]{1,49};
var innerquery=table2.Where(e=>ids.Contains(e.a_id))
.GroupBy(e=>e.c_id)
.Where(g=>g.Count()==2)
.Select(g=>g.Key);
var myItems = from c in table1
where innerquery.Contains(c.id)
orderby c.name
select c;
首先定义您的内部查询,在您获取组后,将获得表示具有公共密钥的对象集合的IGrouping<TKey, TElement>>
集合,过滤仅选择count == 2的组的组,并选择这些团体的钥匙。第二部分真的很容易理解。我将这个过程拆分为两个查询以使其更具可读性,但您可以将两个查询合并为一个。