C# LINQ到实体,组的左外连接

C# LINQ到实体,组的左外连接,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我可以轻松地构建一个SQL查询,它可以执行以下操作 对于“Table1”的每一行,我需要一个“Status”不等于5的相关“Table2”记录数。可能没有匹配项,因此我使用“左外部联接”,然后在该联接中使用“分组依据”,以查找匹配项的总数 以下查询用作SQL。它为计数输出null,因为根本没有匹配项,或者如果至少有一个匹配项,则输出实际整数计数 select Table1.Id, Table2Outer.Count from Table1 left outer j

我可以轻松地构建一个SQL查询,它可以执行以下操作

对于“Table1”的每一行,我需要一个“Status”不等于5的相关“Table2”记录数。可能没有匹配项,因此我使用“左外部联接”,然后在该联接中使用“分组依据”,以查找匹配项的总数

以下查询用作SQL。它为计数输出null,因为根本没有匹配项,或者如果至少有一个匹配项,则输出实际整数计数

select
    Table1.Id,
    Table2Outer.Count
from
    Table1
    left outer join
    (
        select
            Table2.Id,
            COUNT(*) as Count
        from
            Table2
        where
            Table2.Status != 5
        group by
            Table2.Id
    ) as Table2Outer on Table2Outer.Id = Table.Id
不幸的是,我无法解决如何将它转换为LINQ到实体。以下内容甚至没有编译,我被卡住了

var x = (from t1 in ctx.Table1
         join t2 in ctx.Table2 on { t1.Id, t2.Status } equals new { t2.Id, Status != 5 } into t2Outer
         from t2OuterB in t2Outer.DefaultIfEmpty()
         group t2Outer by ?);

有什么想法吗?

使用子查询统计投影中的子记录

var x=来自ctx.Table1中的t1 选择新的 { t1.Id, 计数=从ctx表2中的t2开始 其中t2.状态!=5 其中t2.Id==t1.Id 选择t2。计数 };
是否有表1上表2的导航属性?如果是这样的话,这将变得非常简单。是的,Table1实体有一个名为Table2s的导航,类型为HashSet.Hmm,请进一步查看代码。表2不是可导航属性。看来我无法使用您已经给出的好答案。对不起,还有其他想法吗?如果您将SQL重写为SELECT Table1.Id,请从Table2中选择COUNT*,其中Table2.Id=Table1.Id,Table2.Status 5为Table1中的[COUNT]。。。它是否产生与原始查询相同的结果?看起来外部连接对于您尝试执行的操作来说有点过头了。