如何使用group by连接两个表并进行计算?

时间:2013-11-08 18:28:10

标签: c# linq datatable

我试图找到使用linq group by的两个表之间的数量差异。 有两个名为TabA和TabB的表。两个表都具有相同的结构和主键。主键是:Curr和Dept。

enter image description here

预期结果:

enter image description here

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
        };

感谢您的解决方案:

1 个答案:

答案 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()