我正在尝试使用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()

10-06 12:05