从List <MyClass>更新dbEnitity列值,而无需使用usinf两个foreach循环

时间:2019-12-19 18:03:04

标签: c# asp.net .net list entity-framework

我有一个课程-PairedValues.cs,代码如下:

public class PairedValues
{
    public string FileName { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }

    public PairedValues(string val1, DateTime val2, DateTime val3)
    {
        FileName = val1;
        StartTime = val2;
        EndTime = val3;
    }

    public PairedValues() { }
}

在另一种方法中,我将文件名,开始时间和结束时间添加到列表:

pairedValues.Add(new PairedValues(name, startTime, endTime));

现在,我有一个数据库,该数据库具有相似的列,例如name,startTime,EndTime,我需要从pairedValues更新此表,因此我遍历了pairedValues列表并尝试执行以下操作:

 foreach (var val in pairedValues)
 {           
     listOfFiles = GetListOfFiles()
         .Where(e => e.fileName == val.FileName)
         .ToList();
 }

我想从pairedValues更新listofFiles中每个列的值,我可以使用另一个foreach来做到这一点,但是如何避免这种情况呢?任何建议将不胜感激。

保存到下面的数据库代码:

  public void SaveDetails(List<MyDbTable> listOfFiles)
    {
        _Entity.MyTable.AddRange(listOfFiles);

        try
        {
            _Entity.SaveChanges();
        }
        catch (DbUpdateException ex)
        {
            Console.WriteLine(ex);
        }
    }

1 个答案:

答案 0 :(得分:1)

如果我理解正确

您有一个pairedValues列表,对于每个配对值文件名GetListOfFiles,方法可能返回一个或多个MyTable类型的记录

在这种情况下,您需要使用嵌套循环,或者如果需要,可以使用Linq

1个嵌套循环

 foreach (var val in pairedValues)
 {           
        foreach(var file in GetListOfFiles().Where(x=>x.fileName == 
         val.FileName).ToList())
         {
            //Create new record here (we don't know the property names)
            var newRecord = new MyTable();
            newRecord.FileName = file.Filename // or whater 

             //TODO Now add the new record to 
              _Entity.MyTable.Add(newRecord);
         }

 }
_Entity.SaveChanges();  // save outside the loop to reduce the database roundtrips..

2-Linq

pairedValues.forech(x=> {
    x.GetListOfFiles()
     .Where(e => e.fileName == val.FileName)
     .ToList().foreach(y=> {
          //Create new record here (we don't know the property names)
          var newRecord = new MyTable();
          newRecord.FileName = y.Filename // or whater 

         //TODO Now add the new record to 
          _Entity.MyTable.Add(newRecord);
      });
});

希望这会有所帮助!

P.S我没有使用编译器来编写代码,因此请原谅任何拼写错误。