C# 无法将mysql查询转换为linq语句
按预期工作的我的SQL查询:C# 无法将mysql查询转换为linq语句,c#,mysql,linq,linq-to-sql,sql-to-linq-conversion,C#,Mysql,Linq,Linq To Sql,Sql To Linq Conversion,按预期工作的我的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.Q
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)
};
var结果=
在session.Query().ToList()中从l开始
在session.Query().ToList()中加入ip
论收入报酬等于知识产权
其中l.结果>0
按新{ip.ToAddress}对ip进行分组
进入g
选择新的
{
地址=g.键,
SumAmount=g.Sum(x=>x.Outcome)
};
结果
在最后一行是一个批次
字段,由于我正在分组收入支付
(组ip…
),因此在调用g.Sum()
时不可用
我在这里遗漏了什么?你可以试试这个:
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)
};
var result=from g in(from l in session.Query().ToList())
在session.Query().ToList()中加入ip
在信用证上,收入等于ip.Id
其中l.结果>0
选择新{地址=ip.ToToLoadAddress,结果=l.Output})
g组按g地址分组
选择新的
{
地址=g.键,
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()
});
Lots=session.Query().ToList();
IncomingPayments=session.Query().ToList();
var结果=批量加入(收入支付,
x=>x.收入支付,
y=>y.Id,
(x,y)=>新
{
地址=x.ToToLoadAddress,
结果=y.结果
}).GroupBy(x=>x.地址,
x=>x.结果,
(邱,集团)=>
{
地址=键,
SumAmount=group.Sum()
});
这似乎不起作用。它为g.Sum()
返回“不明确调用”,并且x.Outcome
仍然不可用。@DougPeters请给我几分钟时间更正它。谢谢你的邀请patient@DougPeters请尝试我的更新版本,并让我知道。谢谢这两个脚本似乎都不起作用,但我还是要对你的努力表示感谢。@DougPeters感谢你的支持,但我们的问题是为什么它们不起作用。你收到错误消息了吗?一条错误消息可以帮助我们找出哪里出了问题…结果的类型是什么?您使用的是什么ORM?为什么不创建适当的映射并完全避免连接呢?更好的是,创建一个视图并映射到它。LINQ不是SQL的替代品,尝试重新创建相同的查询通常会导致pain@EhsanSajjadoutput
是一个decimal
@PanagiotisKanavos,我在MySQL上使用NHibernate。这个域相当复杂,我现在无法更改映射,我必须更改数百行代码。我不知道如何创建视图,但感谢您的提示,如果找不到解决方案,我将检查它。创建新映射只需几行-在这种情况下,您只需添加两个实体之间的关系,就可以编写myLot.Payments