1

使用 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。

4

2 回答 2

0

var counts = from Parent in context.Parents join Child in context.Children on Parent.ParentId 等于 Child.ParentId 进入子代 iEnumerableParentIds.Contains(parent.parentId) select new {count = children.Count(), parentId = Parent.ParentId };

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

于 2013-06-29T06:32:36.090 回答
0

我认为您必须在此处更改grouping 源:

             group new { parent, jn } by parent.parentId
             into g
             select new {count = g.Select(x => x.jn).Count(), parentId = g.Key};
于 2013-06-28T17:36:26.953 回答