1

如果我在 a 中有 3 列,其中DataTable包含以下数据:

1 A qwqw
2 A wewe
3 B tyty
4 B trtr
5 C iuiu

我可以将上述数据放入这样的最简单有效的方法是什么Dictionary(Of String, List(Of Foo))

[A] -> {New Foo(1, A, qwqw), New Foo(2, A, wewe)}
[B] -> {New Foo(3, B, tyty), New Foo(4, B, trtr)}
[C] -> {New Foo(5, C, iuiu)}

whereFoo是一种类型,其成员表示表中的字段。我所做的是编写一个查询(LINQ)来首先获取List(Of String). 然后迭代此列表以对列表中的每个元素触发另一个查询,以获取列表中的相应行,从中创建 Foo 的对象并将其放入列表中,然后将其添加到 my Dictionaryas 值中,键为元素. 有任何想法吗?

4

2 回答 2

2

这是一个 C# 答案:

myDataTable.Rows.GroupBy(r => r[1]).ToDictionary(
    g => g.Key
,   g => g.Select(rr => new Foo(rr[0], rr[1], rr[2])).ToList()
);

这个想法是首先按中间列(#1)分组,然后将组转换为字典,使用组键作为字典键,并Foo从组中的每一行创建。

于 2012-05-04T04:08:48.557 回答
1

感谢 dasblinkenlight,我设法将他的 C# 构造转换为 VB.NET:

Dim r as Dictionary(Of String, List(Of String)) = New Dictionary(Of String, List(Of String))
r = myDataTable.AsEnumerable.GroupBy(Function(x) x(1).ToString()).ToDictionary(Function(g) g.Key, Function(g) g.Select(Function(rr) New Foo(rr.Field(Of String)(0), rr.Field(Of String)(1), rr.Field(Of String)(2)).ToList())

它工作完美。

于 2012-05-04T04:41:31.947 回答