您如何在具有父/子关系的 EF 中使用 group by 和 have 子句?

问题描述

如何编写包含 group by 和 having 子句的 linq to entity 查询

例如在 sql 中:

SELECT * FROM dbo.tblParent p
INNER JOIN  
(
    SELECT a.ID
    FROM dbo.tblParent a 
    join dbo.tblChild c ON a.ID = c.FkParentID
    WHERE a.ColValue = 167
    GROUP BY A.ID
    HAVING COUNT(c.ID) = 1
) t ON p.ID = t.ID

解决方法

我找到了自己的答案。

    // this is far from pretty but it works as far as I can tell
Apps = (from x in context.tblParents
                join t in (
                    from p in context.tblParents
                    join c in context.tblChilds
                        on p.ID equals c.FkParentID
                    where p.ColValue  == 167
                    group c.ID by p.ID into grouped
                    where grouped.Count() == 1
                    select new { grouped.Key }) on x.ID equals t.Key
                select x);