LINQ实体框架4在GROUP BY中选择COUNT LEFT OUTER JOIN

时间:2013-06-28 17:31:17

标签: linq entity-framework

使用LINQ to Entities在给定父ID列表的情况下,我无法获取子对象的数量。这是我在直接SQL中的方式:

SELECT COUNT(Child.ParentId) ,Parent.Parentd
FROM Parent
LEFT OUTER JOIN Child ON Child.ParentId = Parent.ParentId
WHERE
    Parent.ParentId IN (
        8417
        ,118458
        ,120567
        ,121596
        )
GROUP BY Parent.ParentId

这是我在LINQ to Entities中尝试的内容:

var counts = from Parent in context.Parents
    join Child in context.Children on Parent.ParentId equals Child.ParentId 
    into children
    from jn in children.DefaultIfEmpty()
    where iEnumerableParentIds.Contains(parent.parentId)
    group parent by parent.parentId
    into g
    select new {count = g.Count(), parentId = g.Key};

这是非常接近但我正在计算分组的父母而不是孩子,当父母没有孩子时,这会给我一个1的计数。

2 个答案:

答案 0 :(得分:0)

我认为您必须在此更改group来源:

             group new { parent, jn } by parent.parentId
             into g
             select new {count = g.Select(x => x.jn).Count(), parentId = g.Key};

答案 1 :(得分:0)

var counts = from context in context.Parents     在context.ParentId中的子元素等于Child.ParentId     进入孩子们     其中iEnumerableParentIds.Contains(parent.parentId)     选择新的{count = children.Count(),parentId = Parent.ParentId};

没有测试(从我的iPod响应;)),我很确定这会给你想要的结果。我不记得我到底做了什么,但我认为这应该有效。基本上,您已经对连接进行了分组,因此您不必再次对所有内容进行分组。