比较两个列表,如果找到匹配,更新第一个列表属性
本文关键字:列表 更新 属性 第一个 如果 两个 比较 | 更新日期: 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();