使用 LINQ 按值过滤字典时遇到问题

Posted

技术标签:

【中文标题】使用 LINQ 按值过滤字典时遇到问题【英文标题】:Cast troubles while using LINQ to filter a Dictionary by values 【发布时间】:2013-05-02 03:34:55 【问题描述】:

我有一个Dictionary<string,int>,其中包含一些值。例如:

“一”,600 "b", 550 “c”,400

我想过滤此列表以保留大于 500 的值。我不经常使用 C#,也没有使用任何 LINQ。我认为这可能是一个学习的好时机。所以,我尝试了以下方法:

Dictionary<string,int> someDictionary = new Dictionary();

// Code to populate someDictionary goes here

someDictionary = (Dictionary<string,int>) someDictionary.Where(pair => pair.Value > 500);

这会引发 InvalidCastException:

无法将“WhereEnumerableIterator`1[System.Collections.Generic.KeyValuePair`2[System.String,System.Int32]]”类型的对象转换为“System.Collections.Generic.Dictionary`2[System.String]”类型的对象,System.Int32]'。

我尝试了一些强制转换,调用.ToDictionary() 等。我似乎无法弄清楚如何正确地强制转换,或者让语法完全正确。你能为我指出正确的方向吗?感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

您需要使用 ToDictionary,然后传递键的选择器,然后传递值的选择器。

someDictionary = someDictionary.Where(pair => pair.Value > 500)
                               .ToDictionary(p => p.Key, p => p.Value);

【讨论】:

不用担心,很高兴它有所帮助。

以上是关于使用 LINQ 按值过滤字典时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 字典中按值索引过滤项目?

如何使用 LINQ 过滤字典并将其返回到相同类型的字典

如何在 C# 中使用 LINQ 过滤嵌套字典?

使用 NSPredicate 按值过滤 NSDictionary

尝试使用 LINQ 创建字典时出现转换错误

NHibernate 3 LINQ:如何过滤 IQueryable 以仅选择 T 类及其子类的对象?