以下表为例:
+----+---------+-----------+ | ID | GroupID | OtherData | +----+---------+-----------+ | 1 | 1 | w4ij6u | +----+---------+-----------+ | 2 | 2 | ai6465 | +----+---------+-----------+ | 3 | 2 | ows64rg | +----+---------+-----------+ | 4 | 2 | wqoi46suj | +----+---------+-----------+ | 5 | 3 | w9rthzv | +----+---------+-----------+ | 6 | 3 | 03ehsat | +----+---------+-----------+ | 7 | 4 | w469ia | +----+---------+-----------+ | 8 | 5 | nhwh57rt | +----+---------+-----------+ | 9 | 5 | mwitgjhx4 | +----+---------+-----------+
如何有效地从此表中提取基于“GroupID”列的List<List<DataRow>>
?
基本上,我希望结果是:
MyList(0) = List: 1 DataRow, ID(s) 1
MyList(1) = List: 3 DataRows, ID(s) 2,3,4
MyList(2) = List: 2 DataRows, ID(s) 5,6
MyList(3) = List: 1 DataRow, ID(s) 7
MyList(4) = List: 2 DataRows, ID(s) 8,9
这是问题所在:此DataTable包含数百列和数万行,因此此操作必须尽可能高效。
我已经尝试过以下方法:
DataView
,并从该视图中提取行/列表。Where
子句选择GroupID的每个“集合”。我希望其他人有更好,更有效的方法来提取这些数据。
答案 0 :(得分:1)
您是否尝试过DataTable.Select()方法?以下是如何使用它的示例:
DataTable table = GetSomeData();
DataRow[] results = table.Select("SomeInt > 0");
List<DataRow> resultList = results.ToList();
使用DataTable.Select绝对应该比DefaultView.Filter更快,正如您所看到的那样,已经内置了将结果放入列表的能力。
答案 1 :(得分:0)
事实证明A)我的返回数据集太大(因为一个错误),而B)LINQ可能是最快的方法,而不需要编写一些非常长或黑客代码。感谢您的想法,每个人,但我现在坚持使用LINQ。