我试图找到使用linq group by的两个表之间的数量差异。 有两个名为TabA和TabB的表。两个表都具有相同的结构和主键。主键是:Curr和Dept。
预期结果:
Diff = 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
};
感谢您的解决方案:
答案 0 :(得分:1)
diff = matches.First().Field<decimal?>("Amt") -
matches.Skip(1).First().Field<decimal?>("Amt")
要处理null元素,我们需要遵循一些规则。但是,当两个操作数之一(或两者)为空时,上面的代码将使diff
为空。
要将0
用作Amt
的默认值,您可以使用GetValueOrDefault()
这样的方法:
diff = matches.First().Field<decimal?>("Amt").GetValueOrDefault() -
matches.Skip(1).First().Field<decimal?>("Amt").GetValueOrDefault()