根据字典中的匹配类型和使用C#集合的另一个列表更新对象列表

根据字典中的匹配类型和使用C#集合的另一个列表更新对象列表,c#,list,linq,dictionary,collections,C#,List,Linq,Dictionary,Collections,我有一个下面定义的CustomType对象列表。i、 e.列表 现在我有了一个字典,其中包含一些与CustomType的Id字段匹配的键 我还有另一个列表,其中包含的值与字典中值中的值相同 现在,我想更新列表中条目的IsCorrect=true,其中列表的值与字典中的值匹配,字典中相应的键与自定义类型的Id匹配 我尝试了以下方法, 首先,我试图得到列表和字典的交集,如下所示 var commonKeys = list .Where(k => dictionaty.ContainsV

我有一个下面定义的CustomType对象列表。i、 e.
列表

现在我有了一个
字典
,其中包含一些与CustomTypeId字段匹配的键
我还有另一个
列表
,其中包含的值与字典中中的值相同
现在,我想更新
列表
中条目的IsCorrect=true,其中
列表
的值与字典中的值匹配,字典中相应的自定义类型Id匹配

我尝试了以下方法,
首先,我试图得到列表和字典的交集,如下所示

var commonKeys = list
    .Where(k => dictionaty.ContainsValue(k))
    .Select(k => dictionary)
    .Select(m => m.Keys);

现在,公共键将包含基于字典中匹配值的公共键,现在我需要更新列表,根据commonKeys中的匹配CustomType的匹配Id,您可以这样实现:检索所需的项,然后迭代它们以设置
是否正确

Dictionary<int,string> ids;
List<string> values
List<CustomType> customTypes;

foreach(var customType in customTypes.Where(item => ids.ContainsKey(item.Id) && 
                                                    values.Contains(ids[item.Id])))
{
    customType.IsCorrect = true;
}
字典id;
列表值
列出客户类型;
foreach(customTypes.Where(item=>ids.ContainsKey(item.Id)&&
values.Contains(Id[item.Id]))
{
customType.IsCorrect=true;
}

吉拉德答案的优化方法-使用
哈希集
。使用
HashSet.Contains
方法,搜索
字典的速度将与键的速度一样快
-O(1)

var stringSet=newhashset(stringValues);
var filtered=customTypes.Where(item=>dictionary.ContainsKey(item.Id))
.Where(item=>stringSet.Contains(dictionary[item.Id]);
foreach(过滤后的变量项)
{
item.IsCorrect=true;
}

这是在数据库中执行还是在内存中执行?另外,请显示您已尝试的操作。此操作需要在内存中执行。我将更新问题,我所尝试的不确定我是否理解其他
列表的目的。嗨,吉拉德,根据我的业务需求,我有3个不同的集合,1个。对象列表2。字典和3。列表和数据在这里填充,现在我必须通过加入所有3个集合来处理数据。这种情况可以被认为是,如果我们在datbase中有3个不同的表,那么通过连接,我们可以简单地得到所需的结果。但是在这里,我必须在内存中执行操作,这很好,但是您需要自定义类型,它们的id在字典键中,它们的(自定义类型)值在
列表中
?@AshishShukla-感谢您接受我的回答:)很高兴它有帮助。但建议您为
列表创建
哈希集
,因为搜索将在
O(1)
中,而不是当前的
O(1)
。但当我想更新Fabio发布的信息时,我不想覆盖它:)
Dictionary<int,string> ids;
List<string> values
List<CustomType> customTypes;

foreach(var customType in customTypes.Where(item => ids.ContainsKey(item.Id) && 
                                                    values.Contains(ids[item.Id])))
{
    customType.IsCorrect = true;
}
var stringSet = new HashSet<string>(stringValues);
var filtered = customTypes.Where(item => dictionary.ContainsKey(item.Id))
                          .Where(item => stringSet.Contains(dictionary[item.Id]));

foreach (var item in filtered)
{
    item.IsCorrect = true;
}