【问题标题】:Multiple Array Insertion in C# using Foreach statement使用 Foreach 语句在 C# 中插入多个数组
【发布时间】:2023-03-30 18:52:01
【问题描述】:

private void Updated_ModRecFGA()
        {
            try
            {
                DRFGAModifiedRecord TABLE = new DRFGAModifiedRecord();
                foreach (ArrayFunc Row in ArrayFunc.QueryResult)
                {
                    foreach (ArrayFunc Row2 in ArrayFunc.QueryResult1)
                    {
                        TABLE.RecordDocID = Row.FGACol1;
                        TABLE.DRNo = Row.FGACol2;
                        TABLE.DDNum = Row.FGACol3;
                        TABLE.LineNumber = Row.FGACol4;
                        TABLE.Itemnmbr = Row2.updItemCode;
                        TABLE.Itemdesc = Row2.updItemDesc;
                        TABLE.Pallet = Row2.updPallets;
                        TABLE.BagsNo = Row2.updBagsNo;
                        TABLE.TotalLoaded = Row2.updTotalKgs;
                        TABLE.PostStat = Row2.updPostStat;
                        TABLE.ProdCode = Row2.updProdcode;
                        TABLE.VariantCode = Row2.updVariantCode;
                        TABLE.DateModify = DateTime.Now.ToShortDateString();
                        TABLE.TimeModify = DateTime.Now.ToShortTimeString();
                        TABLE.UserModify = "Mik";//GlobalvarClass.LogUser;
                        TABLE.ReasonModify = GlobalvarClass.GetModReasOnDR;
                        TABLE.FileType = "New";

                        saveREC(TABLE);
                        gfunc.MsgBox("Saved", 1);
                    }
                }

                ArrayFunc.QueryResult.Clear();
                ArrayFunc.QueryResult1.Clear();
                GlobalvarClass.GetModReasOnDR = string.Empty;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }

是否有另一种正确的方法来使用这种代码以避免重复?我知道它是重复的,因为有两个 foreach 声明

【问题讨论】:

  • 您可以将foreach 分解为单独的方法,第一个方法返回一个布尔值,并让foreach (ArrayFunc Row2 in ArrayFunc.QueryResult1) 方法从第一个方法中获取布尔值。这就是我开始打破foreach 声明的方式。 {
  • 我认为您可能需要为第二个集合过滤掉不相关的行,然后迭代剩下的内容。
  • 感谢 ZeroPhase 和 Tsabo 是的,这是我所做的,我已经打破了它们......我已经做到了......我只是在想是否可能有一种方法可以处理数组上的二维数组用于将其插入 sql 的功能感谢您提供的提示而不破坏它.. 但它总是导致重复数据,所以我确实将它们断开.. 通过按顺序插入数据。非常感谢您的回答

标签: c# arrays foreach-loop-container


【解决方案1】:

只需使用 linq 将两者结合起来。记得在 using 子句中包含 using System.Linq;

var results = ArrayFunc.QueryResult.SelectMany(l1 => ArrayFunc.QueryResult1, (l1, l2) => 
  new DRFGAModifiedRecord
  {
        RecordDocID = l1.FGACol1,
        DRNo = l1.FGACol2,
        DDNum = l1.FGACol3,
        LineNumber = l1.FGACol4,
        Itemnmbr = l2.updItemCode,
        Itemdesc = l2.updItemDesc,
        Pallet = l2.updPallets,
        BagsNo = l2.updBagsNo,
        TotalLoaded = l2.updTotalKgs,
        PostStat = l2.updPostStat,
        ProdCode = l2.updProdcode,
        VariantCode = l2.updVariantCode,
        DateModify = DateTime.Now.ToShortDateString(),
        TimeModify = DateTime.Now.ToShortTimeString(),
        UserModify = "Mik",//GlobalvarClass.LogUser
        ReasonModify = GlobalvarClass.GetModReasOnDR,
        FileType = "New"
  }).ToList();

foreach (row in results)
{
  saveREC(row);
  gfunc.MsgBox("Saved", 1);
}

您也可以使用查询表达式来完成:

var result = (from l1 in ArrayFunc.QueryResult
             from l2 in ArrayFunc.QueryResult1       
             select new DRFGAModifiedRecord { RecordDocID = l1.FGACol1 ... }).ToList();

【讨论】:

  • 拜托Mik...如果答案足够,请将您的问题标记为已回答。
猜你喜欢
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多