从Datagrid中减去重复值

时间:2018-11-19 06:17:29

标签: c# wpf linq wpfdatagrid

我有以下数据网格,如下图所示。

我在Sales Datagrid中有3个类似商品的销售记录,它们的商品代码相同,总和为4。

该特定商品的当前库存为20。

当我单击验证按钮时,我正在使用以下查询从当前库存中减去销售额,从而更新了交易历史记录数据网格。

查询:

var changes = (from dr1 in dtItemSales.AsEnumerable()
               from dr2 in dtItemStock.AsEnumerable()
               where dr1.Field<string>("ItemCode") == dr2.Field<string>("ItemCode")
                       select new
                       {
                           Name = dr2.Field<string>("ItemCode"),
                           Remarks = dr2.Field<int>("Qty") - dr1.Field<int>("Quantity")
                       }).Distinct().ToList();


//Updating the Transaction History DataGrid.
dgTransactionHistory.ItemsSource = changes;

enter image description here

  

我的问题是,当我从当前减去销售额时   库存我将获得2条记录,它们记录着相同的ItemCode,并且记录了2个不同的值19和18

     

在这种情况下,我应该只得到 1条记录,其值为16 。   (20-2-1-1)

任何有关此查询的帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:2)

  

在这种情况下,我应该只得到 1条记录,其值为16 (20-2-1-1)

首先尝试从Quantity中获取dtItemSales的总和,其中特定的ItemCodedtItemStock项代码匹配。

然后用dtItemStock的{​​{1}}列减去上述总和

所以您的最终查询看起来像

Qty

调试器的输出:

enter image description here

答案 1 :(得分:1)

对于问题中突出显示的项目,结果将为18和19(2个结果)。为什么? 因为Stock有1条记录的值为20。在LINQ的Where子句中

做库存-销售时,您会得到3个差异:

20-2,20 -1和另外20-1(用于3次销售)

=> 18、19、19

现在最后您有了一个与众不同的地方-这就是为什么抛出19并得到18&19的原因。

为什么不首先对ItemId上的所有Sales分组求和。然后从库存中减去。