c# – 使用LINQ从另一个字典创建一个字典

前端之家收集整理的这篇文章主要介绍了c# – 使用LINQ从另一个字典创建一个字典前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个类型的字典:
IDictionary<foo,IEnumerable<bar>> my_dictionary

酒吧类看起来像这样:

class bar
{
    public bool IsValid {get; set;} 
}

如何创建仅具有IsValid = true的项目的另一个字典.

我试过这个:

my_dictionary.ToDictionary( p=> p.Key,p=> p.Value.Where (x => x.IsValid));

上述代码的问题是,如果该键的所有元素都为IsValid = false,那么这将创建一个带有空枚举的键.

例如:

my_dictionar[foo1] = new List<bar> { new bar {IsValid = false},new bar {IsValid = false},new bar {IsValid = false}};
my_dictionary[foo2] = new List<bar> {new bar {IsValid = true},new bar{IsValid = false};
var new_dict = my_dictionary.ToDictionary( p=> p.Key,p=> p.Value.Where (x => x.IsValid));
// Expected new_dict should contain only foo2 with a list of 1 bar item.
// actual is a new_dict with foo1 with 0 items,and foo2 with 1 item.

我如何得到我的预期

解决方法

这样的东西
my_dictionary
    .Where(p=> p.Value.Any(x => x.IsValid))
    .ToDictionary( p=> p.Key,p=> p.Value.Where (x => x.IsValid));

这只会包含至少有一个值IsValid的项目.

猜你在找的C#相关文章