关于 c#:Left outer join off of group by dataset using linq

Left outer join off of group by dataset using linq

我正在尝试将以下 SQL 编写为 linq 查询。

1
2
3
4
5
6
7
8
9
10
SELECT grp.OrganisationId,
       grp.OrderCount,
       organisations.Name
FROM   (select OrganisationId,
               count(*) as OrderCount
        from orders
        where 1 = 1
        group by OrganisationId) grp
LEFT OUTER JOIN organisations on grp.OrganisationId = organisations.OrganisationId
WHERE 1 = 1

为了示例的方便,简化了 where 子句。

我需要在不使用导航属性的情况下执行此操作。

这是我的尝试:

1
2
3
4
5
6
7
8
9
10
11
12
13
var organisationQuery = ClientDBContext.Organisations.Where(x => true);

var orderGrouped = from order in ClientDBContext.Orders.Where(x => true)
group order by order.OrganisationId into grouping
select new { Id = grouping.Key.Value, OrderCount = grouping.Count() };

var orders = from og in orderGrouped
join org in organisationQuery on og.Id equals org.Id
select(x => new OrganisationOrdersReportPoco()
{
    OrganisationNameThenCode = org.Name,
    TotalOrders = og.OrderCount
});

但是我收到一个错误...

调用"加入"时类型推断失败

从以前的帖子来看,我相信这是因为我"失去了按顺序连接"(但我不明白为什么在创建新的组织记录集时这很重要,计数)。

谢谢!

我知道您可能认为导航属性是这里的解决方案,但如果可能的话,请我们继续讨论以加入小组,因为这是我要解决的问题。


您正在混合 lambdaLINQ 表达式。将选择更改为:

1
2
3
4
5
select new OrganisationOrdersReportPoco()
{
    OrganisationNameThenCode = org.Name,
    TotalOrders = og.OrderCount
};

如果我正确理解了你的模型,你可以试试这个:

1
2
3
4
5
var orders = ClientDBContext.Organisations.Select(org => new OrganisationOrdersReportPoco
{
    OrganisationNameThenCode = org.Name,
    TotalOrders = org.Orders.Count()
}).ToList();