You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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循环,又保证查询效率:

  1. 先将ActualData转换为以studid为键的字典,提升匹配查找的效率:
var actualDataDict = ActualData.ToDictionary(s => s.studid);
  1. 遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:22:41