【问题标题】:Subtraction of repeating values from Datagrid从 Datagrid 中减去重复值
【发布时间】:2018-11-19 06:17:29
【问题描述】:

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

我在销售数据网格中有 3 个具有相同 ItemCode 的类似商品的销售额,总和为 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;

我的问题是,当我从 Current 中减去 Sales 库存我得到了 2 条记录,它们带有相同的 ItemCode 和 2 个不同的值 19 和 18

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

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

【问题讨论】:

  • 你应该用itemcode按记录分组,然后对销售和购买的任务求和。然后做减法。
  • 投反对票的人请说明你对投反对票的澄清。

标签: c# wpf linq wpfdatagrid


【解决方案1】:

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

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

然后用dtItemStocks Qty 列减去上面的和

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

var changes = (from dr1 in dtItemSales.AsEnumerable()
               from dr2 in dtItemStock.AsEnumerable()
               where dr1.Field<string>("ItemCode") == dr2.Field<string>("ItemCode")
               let sum = dtItemSales.AsEnumerable().Where(x => x.Field<string>("ItemCode") == dr2.Field<string>("ItemCode")).Sum(dr => dr.Field<int>("Quantity"))
               select new
               {
                   Name = dr2.Field<string>("ItemCode"),
                   Remarks = dr2.Field<int>("Qty") - sum
               }).GroupBy(x => x.Name).Select(x => x.First()).ToList();

调试器的输出:

【讨论】:

  • 谢谢兄弟。像魅力一样工作。非常感谢。
【解决方案2】:

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

当您进行库存 - 销售时,您会获得 3 个不同:

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

=> 18、19、19

现在最后你有一个 Distinct - 这就是为什么抛出一个 19 而你得到 18 和 19。

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

【讨论】:

  • 感谢您对 .Distinct() 的澄清。您的意思是将销售项目中的所有销售额相加,然后从当前库存表中减去。
  • 是的。如果您需要帮助 - 请分享销售和库存课程的最小结构。我会尝试并提出 LINQ。
  • 谢谢你的帮助兄弟。非常感谢。
  • 想知道为什么你对这个问题投了反对票,尽管我投票支持你的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2018-06-13
  • 1970-01-01
  • 2013-12-21
  • 2012-03-08
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多