这些是我的数据表dtAllData
的内容。
column_1 column_2 column_3
-------- -------- --------
sec_1 Test1 2
sec_1 Result1 5
sec_1 Unit1 2
sec_2 Test2 2
sec_2 Result2 2
sec_2 Unit2 5
sec_3 Test3 2
sec_3 Result3 2
sec_3 Unit3 2
我需要根据column_1
列中的内容将其拆分为多个数据表。
所以在这种情况下,我应该得到3个表(一个表中所有行都带有sec_1
,另一个带有sec_2
&另一个表带有sec_3
。
我试过了:
var dtArray = dtAllData.AsEnumerable()
.GroupBy(row => new
{
column_1 = (string)row["column_1"]
});
DataTable[] array = new DataTable[dtArray.Count()];
如何从array
获取dtArray
中的表格?
答案 0 :(得分:4)
使用CopyToDataTable()
方法将数据导入新的DataTable。
var Result = from x in dtAllData.AsEnumerable()
where x.Field<string>("column_1") == "sec_1"
select x;
DataTable t1 = Result.CopyToDataTable();
另一种方法是使用LoadDataRow()
方法。 Here is an example
答案 1 :(得分:0)
答案 2 :(得分:0)
修改Kaf
的解决方案,我实现了我想要的目标:
var uniqueList = dtAllData.AsEnumerable().Select(x=> x.Field<string>("column_1")).Distinct();
List<string> myList = new List<string>();
myList =uniqueList.ToList();
DataTable[] array = new DataTable[myList.Count()];
int index = 0;
foreach (string item in myList)
{
var Result = from x in dtAllData.AsEnumerable()
where x.Field<string>("column_1") == item
select x;
DataTable table = Result.CopyToDataTable();
array[index] = table;
index++;
}
因此array
包含3个不同值column_1
答案 3 :(得分:-2)
Function splitDataTable(ByVal tbl As DataTable) As DataTable()
Dim tableCount = Math.Ceiling(tbl.Rows.Count / NewCountRows)
Dim Divisor = tbl.Rows.Count / tableCount
Dim tables = tbl.AsEnumerable().Select(Function(r, i) New With {.row = r, .index = i}).GroupBy(Function(x) Math.Floor(x.index / Divisor)).Select(Function(g) g.Select(Function(x) x.row).CopyToDataTable())
Return tables.ToArray
End Function