调用“加入”时类型推断失败

时间:2015-03-27 15:03:42

标签: c# .net linq

我在单词" join"上收到以下错误在下面的代码中。

  

join子句中某个表达式的类型不正确。   呼叫'加入'

时,类型推断失败
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
});

我没有看到join子句的问题?任何人都可以建议吗?

编辑: 这是我试图用LINQ写的SQL。

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子句......本例简化了。

2 个答案:

答案 0 :(得分:2)

您在第一个查询中选择了匿名类型:

var orderGrouped = ..
    select new { Id = grouping.Key.Value, OrderCount = grouping.Count() };

这个'休息'与order的连接。

join看起来应该适用于Linq-to-Objects但它无法转换为SQL。

您必须消除匿名类型,并以某种方式建立更直接的连接。

我想知道你为什么不去组织?通过使用nav-properties进行适当的映射,它应该如下所示:

from org in ClientDBContext.Organisations
select(x => new OrganisationOrdersReportPoco()
{
    OrganisationNameThenCode = org.Name,
    TotalOrders = org.Orders.Count
};

使用Id属性应该更多一些,但遵循相同的模式。

答案 1 :(得分:0)

(归功于Giorgi Nakeuri)

我把LAMBDA与LINQ表达混淆了。

用此替换我的选择解决了它。

select new OrganisationOrdersReportPoco()
{
    OrganisationNameThenCode = org.Name,
    TotalOrders = og.OrderCount
};