Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ实体框架4按组选择计数左外部联接_Linq_Entity Framework - Fatal编程技术网

LINQ实体框架4按组选择计数左外部联接

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

在使用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
        ,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上设置外键,因为我们知道有一些孤儿无法从子表中消除。答案可能就在这里:现在尝试一下……旧问题的答案成功了