我在单词" 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子句......本例简化了。
答案 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
};