2013-05-08 60 views
3

我有一个Dictionary<string,int>,其中有一些值。例如:在使用LINQ按值过滤字典时抛出麻烦

  • “一”,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(),等我似乎无法弄清楚如何正确施放此,或获取语法完全正确。你能为我指出正确的方向吗?感谢您的时间。

回答

10

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

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

很好,谢谢!非常感激。 – Brad 2013-05-08 02:23:24

+0

不用担心,很高兴帮助。 – 2013-05-08 02:24:08