我的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()
调用中不可用。
这里我漏掉了什么?
发布于 2014-06-26 12:49:23
你可以试试这个:
var result = from g in (from l in session.Query<Lot>().ToList()
join ip in session.Query<IncomingPayment>().ToList()
on l.IncomingPayment equals ip.Id
where l.Outcome > 0
select new { Address = ip.ToToAddress, Outcome = l.Outcome})
group g by g.Address
select new
{
Address = g.Key,
SumAmount = g.Sum(x => x.Outcome)
};
或者更仔细地说:
Lots = session.Query<Lot>().ToList();
IncomingPayments = session.Query<IncomingPayment>().ToList();
var result = Lots.Join(IncomingPayments,
x=>x.IncomingPayment,
y=>y.Id,
(x,y) => new
{
Address = x.ToToAddress,
OutCome = y.Outcome
}).GroupBy(x => x.Address,
x => x.Outcome,
(kew, group) =>
{
Address = key,
SumAmount = group.Sum()
});
https://stackoverflow.com/questions/24430971
复制相似问题