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

C# 如果找到匹配项,则比较两个列表更新第一个列表属性,c#,linq,C#,Linq,我有两张单子,第一张是 DataTable DtblDiseaseList = this.GetDisease(); List<DiseaseModel> model = DtblDiseaseList.DataTableToList<DiseaseModel>(); DataTable DtblDiseaseList=this.GetDisease(); 列表模型=DtblDiseaseList.DataTableToList(); 其次是 var userDise

我有两张单子,第一张是

DataTable DtblDiseaseList = this.GetDisease();
List<DiseaseModel> model = DtblDiseaseList.DataTableToList<DiseaseModel>();
DataTable DtblDiseaseList=this.GetDisease();
列表模型=DtblDiseaseList.DataTableToList();
其次是

var userDisease = DiseaseManagementBA.getUserDisease(UserID).DataTableToList<DiseaseModel>();
var userDisease=DiseaseManagementBA.getUserDisease(UserID.DataTableToList();
这里我想比较userDisease和model list,如果找到匹配项,那么我想更新第一个list的属性,即
model
。在
DiseaseModel
类中,有on属性,即
IsChecked
。如果找到匹配项,我想将此属性设置为
true

第一个“如果找到匹配项”,可以使用联接完成。这将枚举每个列表,并从找到“匹配”条件的模型返回结果。我假设“匹配”是匹配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();

谢谢你的回复。我的问题解决了。看看我的答案。谢谢你的回复。我的问题解决了。请看我的答案。O(n^2)您确实应该使用哈希集或其他方法来查找密钥。