使用linq通过数据集离开外部联接

时间:2015-03-30 08:15:48

标签: c# linq

我正在尝试将以下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
});

但是我收到错误...

在“加入”

的调用中,类型推断失败

从以前的主题来看,我认为这是因为我“失去了订单加入”(但我不明白为什么在创建一个新的组织记录集时,这很重要)。

谢谢!

我知道您可能认为导航属性是此处的解决方案,但如果可能的话,我们可以将讨论保持在群组之间,因为这是我要解决的问题。

2 个答案:

答案 0 :(得分:1)

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

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();