我有一个包含“a”,“b”,“c”列的数据表。 a和b是我的查找键,所以我想找到c。
我想使用linq将其转换为Dictionary<a, Dictionary<b, c>>
(或ILookup)
这可能吗?
我能提出的壁橱解决方法是:
var lookup = resultTable.AsEnumerable().ToLookup(row => row["a"] & row["b"],
row => row["c"]);
然后我可以连接a + b以用作关键字。
有没有更好的方法,或者这可能更快,因为它是一个更简单的数据结构?
答案 0 :(得分:2)
这是你可以在C#中实现的一种方式:
var dict = resultTable.AsEnumerable()
.GroupBy(row => row.Field<A>("a"))
.ToDictionary(
g => g.Key,
g => g.ToDictionary(
row => row.Field<B>("b"),
row => row.Field<C>("c")
)
);
等效的VB:
Dim dict = resultTable.AsEnumerable
.GroupBy(Function(row) row.Field(Of A)("a"))
.ToDictionary(
Function(g) g.Key,
Function(g) g.ToDictionary(
Function(row) row.Field(Of B)("b"),
Function(row) row.Field(Of C)("c")
)
)
答案 1 :(得分:0)
坦率地说,我认为你应该争取Dictionary<Tuple<A, B>, C>
:
var dict = resultTable.AsEnumerable()
.GroupBy(row => Tuple.Create(
row.Field<A>("a"),
row.Field<B>("b")
)
)
.ToDictionary(
group => group.Key,
group => group.Single().Field<C>("c")
);