IEnumerable <t> .ToLookup <tkey,tvalue =“”> </tkey,> </t>

时间:2012-11-28 04:16:29

标签: c# linq lambda lookup

我正在尝试使用以下代码将IEnumerable<KeyValuePair<string, object>>转换为ILookup<string, object>

var list = new List<KeyValuePair<string, object>>()
{
    new KeyValuePair<string, object>("London", null),
    new KeyValuePair<string, object>("London", null),
    new KeyValuePair<string, object>("London", null),
    new KeyValuePair<string, object>("Sydney", null)
};

var lookup = list.ToLookup<string, object>(a => a.Key);

但编译器抱怨:

  

实例参数:无法转换   'System.Collections.Generic.List&GT;'   至   'System.Collections.Generic.IEnumerable'

  

'System.Collections.Generic.List&GT;'   不包含'ToLookup'的定义和最佳扩展名   方法过载   “System.Linq.Enumerable.ToLookup(System.Collections.Generic.IEnumerable,   System.Func)'有一些无效的参数

  

无法从'lambda expression'转换为'System.Func'

我对lambda表达式做错了什么?

1 个答案:

答案 0 :(得分:5)

只需删除<string, object>即可自动推断类型:

var lookup = list.ToLookup(a => a.Key);

真的应该是:

var lookup = list.ToLookup<KeyValuePair<string, object>, string>(a => a.Key);