我似乎无法找到解决方案,但错误消息不是很有帮助。
我有一个DataTable:
iGuid,iDateTime,iDecimal
我想创建一个词典词典,这样......
iGuid - > iDateTime - > iDecimal。
例如。
Guid1, Monday, 4
Guid1, Tuesday, 4
Guid1, Friday, 1
Guid2, Monday, 1
Guid2, Tuesday, 1
现在我想把它变成一个带有iGuid键的字典,另一个带有iDateTime键的字典,以及iDecimal的值。
我现在的代码是:
Dictionary<Guid, Dictionary<DateTime, decimal>> val = iDataTable.OfType<CustomDataRow>().GroupBy(r => new { r.iGuid } )
.ToDictionary<Guid, Dictionary<DateTime, decimal>>( row => row.Key.iGuid,
child => child.ToDictionary<DateTime, decimal>(subKey => subKey.iDateTime, subVal => subVal.iDecimal));
我必须返回这个类型,因为我需要在其他函数中使用它(如果我在它前面抛出一个var,那很好)。
答案 0 :(得分:2)
您的实施问题是该方法的错误用法:
public static Dictionary<TKey, TSource> ToDictionary<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector
)
正如您所看到的,此调用中指定的类型不是字典的预期返回类型。
https://msdn.microsoft.com/en-us/library/vstudio/bb549277(v=vs.100).aspx
由于您没有使用源(CustomDataRow)作为字典的值Type,因此无法使用此签名。
这个应该做的工作:
Dictionary<Guid, Dictionary<DateTime, decimal>> val =
iDataTable
.OfType<CustomDataRow>()
.GroupBy(r => r.iGuid)
.ToDictionary(group => group.Key,
group => group.ToDictionary(dataRow => dataRow.iDateTime,
dataRow => dataRow.iDecimal));