我正在尝试使用linq group by查找两个表之间的金额差异。
有两个表,分别名为TabA和TabB。这两个表具有相同的结构和主键。主键是:Curr和Dept。
预期结果:
差异= TabA.Amt- TabB.Amt
我尝试了下面的部分代码:
var q = from row in TabA.AsEnumerable().Concat(TabB.AsEnumerable())
group row by new
{
currency = row.Field<String>("Curr"),
dept = row.Field<String>("Dept")
}into matches
select new
{
currency = matches.Key.currency,
dept = matches.Key.dept,
// diff = Amount Difference
};
感谢您的解决方案:
最佳答案
diff = matches.First().Field<decimal?>("Amt") -
matches.Skip(1).First().Field<decimal?>("Amt")
要处理空元素,我们需要遵循一些规则。但是,当两个操作数(或两者)之一为null时,以上代码将使
diff
为null。更新
要将
0
用作Amt
的默认值,可以使用以下方法GetValueOrDefault()
:diff = matches.First().Field<decimal?>("Amt").GetValueOrDefault() -
matches.Skip(1).First().Field<decimal?>("Amt").GetValueOrDefault()