LINQ实体框架4按组选择计数左外部联接
在使用LINQ访问实体时,如果给定父ID列表,我很难获得子对象的计数。下面是我如何在straight SQL中实现这一点:LINQ实体框架4按组选择计数左外部联接,linq,entity-framework,Linq,Entity Framework,在使用LINQ访问实体时,如果给定父ID列表,我很难获得子对象的计数。下面是我如何在straight SQL中实现这一点: SELECT COUNT(Child.ParentId) ,Parent.Parentd FROM Parent LEFT OUTER JOIN Child ON Child.ParentId = Parent.ParentId WHERE Parent.ParentId IN ( 8417 ,118458 ,1205
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实体中尝试的内容:
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。我认为您必须更改
组的源代码:
group new { parent, jn } by parent.parentId
into g
select new {count = g.Select(x => x.jn).Count(), parentId = g.Key};
变量计数=上下文中的父项。父项
在上下文中联接子项。Parent.ParentId上的子项等于Child.ParentId
变成孩子
其中iEnumerableParentIds.Contains(parent.parentId)
选择新{count=children.count(),parentId=Parent.parentId}
如果没有测试(从我的iPod;),我很肯定这会给你想要的结果。我一时记不清自己到底在做什么,但我认为这应该行得通。基本上,您已经对联接进行了分组,因此不必再次对所有内容进行分组。您是否为您的父实体
实体设置了“导航属性”,如子实体
属性?否。此项目是“数据优先”设置,没有正式的sql外键关系设置。我们从未在db上设置外键,因为我们知道有一些孤儿无法从子表中消除。答案可能就在这里:现在尝试一下……旧问题的答案成功了