我正在尝试将以下SQL编写为linq查询。
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子句。
我需要在不使用导航属性的情况下这样做。
这是我的尝试:
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
});
但是我收到错误...
在“加入”
的调用中,类型推断失败从以前的主题来看,我认为这是因为我“失去了订单加入”(但我不明白为什么在创建一个新的组织记录集时,这很重要)。
谢谢!
我知道您可能认为导航属性是此处的解决方案,但如果可能的话,我们可以将讨论保持在群组之间,因为这是我要解决的问题。
答案 0 :(得分:1)
您正在混合使用lambda
和LINQ
个表达式。将选择更改为:
select new OrganisationOrdersReportPoco()
{
OrganisationNameThenCode = org.Name,
TotalOrders = og.OrderCount
};
答案 1 :(得分:0)
如果我理解你的模型,你可以试试这个:
var orders = ClientDBContext.Organisations.Select(org => new OrganisationOrdersReportPoco
{
OrganisationNameThenCode = org.Name,
TotalOrders = org.Orders.Count()
}).ToList();