我有一个课程-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);
}
}
答案 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我没有使用编译器来编写代码,因此请原谅任何拼写错误。