嵌套选择MySQL语句到LINQ

时间:2017-02-20 22:47:45

标签: c# mysql linq

我试图将以下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;

请欣赏一些指导

1 个答案:

答案 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的组的组,并选择这些团体的钥匙。第二部分真的很容易理解。我将这个过程拆分为两个查询以使其更具可读性,但您可以将两个查询合并为一个。