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 }); |
但是我收到一个错误...
调用"加入"时类型推断失败
从以前的帖子来看,我相信这是因为我"失去了按顺序连接"(但我不明白为什么在创建新的组织记录集时这很重要,计数)。
谢谢!
我知道您可能认为导航属性是这里的解决方案,但如果可能的话,请我们继续讨论以加入小组,因为这是我要解决的问题。
您正在混合
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(); |