使用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的计数。
答案 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响应;)),我很确定这会给你想要的结果。我不记得我到底做了什么,但我认为这应该有效。基本上,您已经对连接进行了分组,因此您不必再次对所有内容进行分组。