将数据表分成多个数据表
问题描述:
这些是我的数据表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
?
答
使用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
答
修改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
该拆分的目的是什么?在ASA/ASE数据库(Sybase产品)中,可能会基于某个列进行复制。我不是SQLServer专家,但也许SqlServer具有类似的功能? – Kamil 2013-02-27 13:30:29
你写了_I需要将它拆分成多个数据表后_我应该得到3个表_你想拆分成多个数据库或表吗?你为什么想分组?你只需通过where clausole来过滤表格 – Max 2013-02-27 13:31:31