我有以下数据网格,如下图所示。
我在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;
我的问题是,当我从当前减去销售额时 库存我将获得2条记录,它们记录着相同的ItemCode,并且记录了2个不同的值19和18 。
在这种情况下,我应该只得到 1条记录,其值为16 。 (20-2-1-1)
任何有关此查询的帮助将不胜感激。谢谢。
答案 0 :(得分:2)
在这种情况下,我应该只得到 1条记录,其值为16 。 (20-2-1-1)
首先尝试从Quantity
中获取dtItemSales
的总和,其中特定的ItemCode
与dtItemStock
项代码匹配。
然后用dtItemStock
的{{1}}列减去上述总和
所以您的最终查询看起来像
Qty
调试器的输出:
答案 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分组求和。然后从库存中减去。