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()
};
我可以轻松构建一个 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()
};