【发布时间】:2014-06-26 12:47:37
【问题描述】:
按预期工作的我的 SQL 查询:
SELECT SUM(outcome), toaddress
FROM lot l
JOIN incomingpayment ip
ON l.incomingpayment_id = ip.id
WHERE outcome > 0
GROUP BY ip.toaddress
ORDER BY SUM(outcome) DESC
我正在尝试将其转换为 LINQ 语句,但无论如何都没有取得巨大成功:
var result =
from l in session.Query<Lot>().ToList()
join ip in session.Query<IncomingPayment>().ToList()
on l.IncomingPayment equals ip
where l.Outcome > 0
group ip by new {ip.ToAddress}
into g
select new
{
Address = g.Key,
SumAmount = g.Sum(x => x.Outcome)
};
最后一行中的Outcome 是Lot 的字段,由于我正在对IncomingPayment (group ip...) 进行分组,因此在g.Sum() 调用中不可用。
我在这里错过了什么?
【问题讨论】:
-
Outcome 的类型是什么??
-
您使用的是什么 ORM?为什么不创建正确的映射并完全避免连接?更好的是,创建一个视图并映射到它。 LINQ 不是 SQL 的替代品,尝试重新创建相同的查询通常会导致痛苦
-
@EhsanSajjad
outcome是decimal。 -
@PanagiotisKanavos 我在 MySQL 上使用 NHibernate。域非常复杂,此时我无法更改映射,我将不得不更改数百行代码。我不确定如何创建视图,但感谢您的提示,如果没有找到解决方案,我会检查一下。
-
创建一个新的映射只有几行——在这种情况下你只需要在两个实体之间添加一个关系,所以你可以写
myLot.Payments
标签: c# mysql linq linq-to-sql sql-to-linq-conversion