将数据表拆分为多个数据表
本文关键字:数据表 拆分 | 更新日期: 2023-09-27 18:01:35
这些是我的数据表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()];
如何从dtArray
获取array
中的表?
使用CopyToDataTable()
方法将数据获取到新的DataTable中。
var Result = from x in dtAllData.AsEnumerable()
where x.Field<string>("column_1") == "sec_1"
select x;
DataTable t1 = Result.CopyToDataTable();
另一种方法是使用CCD_ 9方法。以下是
如果您知道可以使用的列_1的确切名称。选择.Select("column_1 = sec_1")
等或使用DataView
修改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
值的数据表
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