C# 反向先进先出数量项目?

C# 反向先进先出数量项目?,c#,C#,下面我的第一篇文章已经解决了 我有一个数据库详细信息名称Item\u detail No(autoincrement) Id_Item qtyLimit qtyReal ------------------------------------------------------- 1 1 30 0 2 1 4

下面我的第一篇文章已经解决了

我有一个数据库详细信息名称
Item\u detail

No(autoincrement)      Id_Item    qtyLimit     qtyReal      
-------------------------------------------------------
       1                  1          30           0
       2                  1          40           0
       3                  2          50           0
       4                  2          60          10
因此,对于项目1,项目1的所有实际数量总和为0,数量限制为详细项目中每个数据的限制数量

如果我有来自交易中
的datagridview1的数据

   Id_Item    qtyIn
   ---------------
      1         50        
      2         80
 NoTrans(autoincrement) no(from item_detail)      qtyIn
---------------------------------------------------------
       1                       1                    10
       2                       2                    40
       3                       3                    30
       4                       4                    50
如何将我的交易中的数量添加到我的
更新项目\u详细信息
从下到上反向 我想要这样的结果

 No(autoincrement)     Id_Item      qtyLimit     qtyReal
-------------------------------------------------------
       1                  1             30         10            
       2                  1             40         40           
       3                  2             50         30           
       4                  2             60         60           
因此,其检查限制id no 1如果qty limit=qty real,则使用相同的no id从底部移动到顶部,然后使用qty limit再次检查

之后,我想将该事务处理放入表
Item\u transaction

   Id_Item    qtyIn
   ---------------
      1         50        
      2         80
 NoTrans(autoincrement) no(from item_detail)      qtyIn
---------------------------------------------------------
       1                       1                    10
       2                       2                    40
       3                       3                    30
       4                       4                    50
trycode

private void calculate()
{
// Transaction: Id_Item, qtyIn
IEnumerable<in_transaction> contextItemIn = null;
// ItemDetail: No, Id_Item, qtyLimit, qtyReal
IEnumerable<ItemDetail> contextItemDetails = null;

Dictionary<int, decimal> itemInQuantities = contextItemIn.ToDictionary(x => x.Id_Item, x => x.qtyIn);

var itemDetails = contextItemDetails.OrderBy(x => x.No).ToList();

foreach (var item in itemDetails.AsEnumerable().Reverse())
{
    decimal inQty;
    if (itemInQuantities.TryGetValue(item.Id_Item, out inQty))
    {
        var qtyChange = inQty
        item.qtyReal += qtyChange;
        inQty -= qtyChange;
        if (inQty == item.QtyLimit)
        {

            itemInQuantities.Remove(item.Id_Item);
        }
        else
        {
            itemInQuantities[item.Id_Item] = inQty;
        }
        if (qtyChange != 0)
        {
            transactions.Add(new ItemTransaction { /*No = autoincrement, */ 
            NoTrans = item.No, qtyIn = qtyChange });
        }
    }
}

// itemDetails qty values are corrected
private void calculate()
{
//交易记录:Id_项目,qtyIn
IEnumerable contextItemIn=null;
//ItemDetail:否,Id\u项,qtyLimit,qtyReal
IEnumerable contextItemDetails=null;
Dictionary itemInQuantities=contextItemIn.ToDictionary(x=>x.Id\u项,x=>x.qtyIn);
var itemDetails=contextItemDetails.OrderBy(x=>x.No.ToList();
foreach(itemDetails.AsEnumerable().Reverse()中的变量项)
{
小数位数;
if(ItemInQuanties.TryGetValue(item.Id\u item,out InQuantity))
{
变量qtyChange=inQty
item.qtyReal+=qtyChange;
inQty-=qtyChange;
if(inQty==item.QtyLimit)
{
iteminquanties.Remove(item.Id\u item);
}
其他的
{
ItemInQuantilities[item.Id\u item]=InQuantity;
}
如果(qtyChange!=0)
{
添加(新项目事务{/*No=autoincrement,*/
NoTrans=item.No,qtyIn=qtyChange});
}
}
}
//itemDetails数量值已更正
}


所以,请帮助我,就我所知,只需要一些小的改动就可以了

因此,让我们首先将
项的详细信息.capacity
定义为
qtyLimit-qtyReal
。单个项目详细信息的最大更改受其
容量的限制,而所需的更改由\u transaction.qtyIn
中的
给出。因此,您可以计算单个项目的数量变化,如下所示:

var qtyChange = Math.Min(inQty, item.qtyLimit - item.qtyReal);
当剩余的
inQty
0
时,来自
in_事务
的条目完成,因此更改条件

//if (inQty == item.QtyLimit) // <- wrong
if (inQty == 0)
    // ... remove

请更正您的代码。。。像
qyout
ItemOut
这样的问题看起来像是你上一个问题的遗留问题。另外,如果您明确地为每个表指定一个名称也会有所帮助,这样我们就总能知道我们在谈论什么。与第一个表
项目详细信息
、第二个表
项目交易
、第三个表
更新项目详细信息
第四个表
项目交易
类似。当然,你可以选择不同的名字,但无论如何,还是要以某种方式命名。已经在@grek40编辑我的帖子了吗