首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >过滤器字典字符串键,对象包含属性值的列表对象

过滤器字典字符串键,对象包含属性值的列表对象
EN

Stack Overflow用户
提问于 2018-05-31 17:40:03
回答 2查看 73关注 0票数 -5

嗨,我有一个this对象

代码语言:javascript
复制
public class Field 
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Dictionary<string, List<Field>> fields = new Dictionary<string, List<Field>>();

fields.Add(
     "pippo", 
     new List<Field>() { 
         new Field() { Name = "1" }, 
         new Field() { Name = "2" }, 
         new Field() { Name = "3" } 
});

fields.Add(
     "pluto", 
     new List<Field>() { 
         new Field() { Name = "1" }, 
});

fields.Add(
     "paperino", 
     new List<Field>() { 
         new Field() { Name = "3" } 
});

我希望从字典中删除名称字段中没有字符串"1“的值中的所有键,如下例所示

代码语言:javascript
复制
fields: key "pippo" value { { Name = "1" }, { Name = "2" }, { Name = "3" } }
        key "pluto" value { { Name = "1" }}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 17:46:37

一种方法是使用linq:

代码语言:javascript
复制
var result = fields
    .Where(f => f.Value.Any(x => x.Name == "1"))
    .ToDictionary(k => k.Key, v => v.Value);

请注意,这不会改变原来的字典,但会返回一个新的字典。如果您想更改原始字典,只需使用它而不是var result - fields = fields.Where....

票数 1
EN

Stack Overflow用户

发布于 2018-05-31 17:49:38

使用后跟ToDictionaryWhere调用

代码语言:javascript
复制
fields = fields.Where(x => x.Value.Any(y => y.Name == "1"))
               .ToDictionary(x => x.Key, x => x.Value);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50621214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档