C#中如何通过LINQ基于studid从另一列表更新指定列表?
用LINQ实现基于studid更新tempData中的Student记录
首先,定义的Student类如下:
public class Student { public int studid {get; set;} public string Name {get; set;} public int Age {get; set;} public string Division {get; set;} }
现有两个Student类型的列表:
// 10分钟前从数据库获取的记录 List<Student> tempData = new List<Student>(); // 包含数据库中最新数据的列表 List<Student> ActualData = DB.GetData();
需求:基于studid字段,用ActualData中的最新数据更新tempData里的对应记录,且仅更新tempData中的现有记录(因为已绑定到DataGrid),要求不使用for循环,用LINQ实现。
实现方案
可以结合LINQ的字典转换与List的ForEach方法来实现,既避免手动for循环,又保证查询效率:
- 先将
ActualData转换为以studid为键的字典,提升匹配查找的效率:
var actualDataDict = ActualData.ToDictionary(s => s.studid);
- 遍历
tempData中的每个学生,匹配字典中的最新记录并更新属性:
tempData.ForEach(student => { if (actualDataDict.TryGetValue(student.studid, out var latestStudent)) { student.Name = latestStudent.Name; student.Age = latestStudent.Age; student.Division = latestStudent.Division; } });
说明
- 使用
ToDictionary将ActualData转为字典后,根据studid查找记录的时间复杂度为O(1),比每次遍历ActualData更高效。 - 采用
List<T>.ForEach方法替代手动for循环,符合LINQ风格的操作。 - 更新现有Student对象的属性而非替换对象,能保证DataGrid的绑定引用不被破坏,避免绑定失效的问题。
内容的提问来源于stack exchange,提问作者Sofiya kalan
相关产品推荐
相关产品推荐

