我有两个对象,我们称它们为 Input
和 Output
Input
具有属性 Input_ID
、Label
和 Input_Amt
Output
具有属性 Output_ID
和 Output_Amt
我想在 LINQ 中执行等效的 SQL 语句:
SELECT Label, Sum(Added_Amount) as Amount FROM
(SELECT I.Label, I.Input_Amt + ISNULL(O.Output_Amt, 0) as Added_Amount
FROM Input I LEFT OUTER JOIN Output O ON I.Input_ID = O.Output_ID)
GROUP BY Label
对于内部查询,我写的是这样的:
var InnerQuery = from i in input
join o in output
on i.Input_ID equals o.Output_ID into joined
from leftjoin in joined.DefaultIfEmpty()
select new
{
Label = i.Label,
AddedAmount = (i.Input_Amt + leftjoin.Output_Amt)
};
然而,在测试中,该语句返回 null。是什么赋予了?
此外,在将我的金额相加后,如何在单个 LINQ 语句中继续所需的查询并执行分组?
最佳答案
好的,现在我对发生的事情有了更好的了解,主要问题是您没有得到与 ISNULL 位等效的信息。试试这个:
var InnerQuery = from i in input
join o in output
on i.Input_ID equals o.Output_ID into joined
from leftjoin in joined.DefaultIfEmpty()
select new
{
Label = i.Label,
AddedAmount = (i.Input_Amt + (leftjoin == null ? 0 : leftjoin.Output_Amt))
};
关于c# - 如何在 LINQ 中执行嵌套的加入、添加和分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/254784/