比较两个列表,如果找到匹配,更新第一个列表属性

本文关键字:列表 更新 属性 第一个 如果 两个 比较 | 更新日期: 2023-09-27 18:05:07

我有两个列表,第一个是

DataTable DtblDiseaseList = this.GetDisease();
List<DiseaseModel> model = DtblDiseaseList.DataTableToList<DiseaseModel>();

第二个是

var userDisease = DiseaseManagementBA.getUserDisease(UserID).DataTableToList<DiseaseModel>();

这里我想比较userDisease和模型列表,如果找到匹配,那么我想更新第一个列表的属性,即model。在DiseaseModel类中有一个性质,即IsChecked。如果找到匹配,我想将true设置为此属性。

比较两个列表,如果找到匹配,更新第一个列表属性

第一个"if match found"可以使用Join来完成。这将枚举您的每个列表,并从找到"匹配"条件的模型返回结果。我假设这里的"match"是匹配id,因为我不知道实际的标准。

var result = (from m in model
              where join d in userDisease on m.ID == d.ID
              select m).ToList();

一旦有了列表,接下来就是迭代和设置值的问题了。我有点假设你正在使用LinqToSql与InsertOnSubmit和SubmitChanges方法。

foreach (var r in result)
{
  r.IsChecked = true;
  this.InsertOnSubmit(r);
}     
this.SubmitChanges();

我应该注意,这将工作,但第一次连接的结果被枚举到内存中,它们不被数据库更新。

您可以简单地这样做:

model.Intersect(userDisease).ToList().ForEach(_ => _.IsChecked = true);

大家好,我的问题是解决这个Linq查询

model.Where(x => userDisease.Any(z => z.DiseaseId == x.DiseaseId)).Select(x => { x.IsChecked = true; return x; }).ToList();