【问题标题】:Type inference failed in the call to 'Join'调用“加入”时类型推断失败
【发布时间】:2015-03-27 15:03:42
【问题描述】:

我在以下代码中的“加入”一词上收到以下错误。

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 子句...在本示例中进行了简化。

【问题讨论】:

  • organisationQuery 在哪里?

标签: c# .net linq


【解决方案1】:

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

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

这会“中断”与order 的连接。

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

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

我想知道您为什么不直接从 Organisations 离职?使用 nav-properties 进行正确映射后,它应该如下所示:

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

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

【讨论】:

  • 我怎样才能从一个分组的结果按顺序加入组织,像这样?
  • 试着想象一下这应该如何转换成 SQL。 orderGrouped 不能再与表关联了。
  • 我需要对订单应用定制的 where 子句,这样建议就不起作用了。 ClientDBContext.Orders 具有此处未显示的 where 子句……和 organizationQuery 一样。 (我在发布之前尝试简化查询。)
  • cmets 中的代码不可读。但是orderGrouped是一堆匿名元组,怎么知道是来自Orders呢?
【解决方案2】:

(感谢 Giorgi Nakeuri)

我将 LAMBDA 与 LINQ 表达式混淆了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多