LINQ to Entities,组的左外连接

LINQ to Entiites, left outer join of a group by

我可以轻松构建一个 SQL 查询来执行以下操作。

对于 'Table1' 的每一行,我想要计算 'Status' 不等于 5 的相关 'Table2' 记录的数量。可能没有匹配项,所以我使用a 'left outer join' 然后在其中使用 'group by' 以查找匹配项总数。

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

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 to Entities。以下甚至无法编译,我被卡住了!

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 = from t1 in ctx.Table1
        select new
        {
            t1.Id,
            Count = (from t2 in ctx.Table2
                     where t2.Status != 5
                     where t2.Id == t1.Id
                     select t2).Count()
        };