我有这段代码
var contacts = dr.mktDoctorContacts
.GroupBy(x => x.ContactType)
.Select(zb => new
{
Key = zb.Key,
GroupWiseContacts = zb.Select(x => x.Contact).ToList()
})
.ToDictionary<string,List<string>>(y => y.Key, y => y.GroupWiseContacts)
我不知道这段代码有什么问题。
编译时错误msg说:System.Generic.IEnumerable不包含定义和最佳扩展方法重载有一些无效的参数。在我的visual studio工具提示文档中我只能看到ToDictionary方法的两个重载,而我在Web上遇到了两个以上的ToDictionary重载
编辑以下是编译时的确切错误消息
错误13'
System.Collections.Generic.IEnumerable<AnonymousType#1>
' 不包含的定义 'ToDictionary
'和最佳扩展名 方法过载 'System.Linq.Enumerable.ToDictionary<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>, System.Collections.Generic.IEqualityComparer<TKey>)
' 有一些无效的论点
答案 0 :(得分:15)
编译器消息使错误清除:没有方法ToDictionary
可以接受指定的参数和类型。
这里的错误在于指定ToDictionary
上的类型参数。 MSDN文档将扩展方法定义为ToDictionary<TKey, TSource>
。示例中的来源为IEnumerable<AnonymousType#1>
,但您指定的类型为List<string>
。
要更正错误,请省略类型参数;编译器将推断出正确的类型。您还可以将Select
和ToDictionary
转换合并到一个语句中:
var contacts = dr.mktDoctorContacts
.GroupBy(x => x.ContactType)
.ToDictionary(
y => y.Key,
y => y.Select(x => x.Contact).ToList());
答案 1 :(得分:1)
不要在数据库中运行该组操作,它会导致每个组的元素在单独的往返中被提取。
ILookup<string, string> contacts = dr.mktDoctorContacts
.ToLookup<Contact, string, string>(x => x.ContactType, x => x.Contact);
答案 2 :(得分:0)
重写了您的代码(并添加了.AsEnumerable()
):
var dictionary = dr.mktDoctorContacts
.GroupBy(x => x.ContactType)
.AsEnumerable()
.ToDictionary(
i => i.Key,
i => i.Select(x => x.Contact).ToList()
)
);