将数据表分成多个数据表

问题描述:

这些是我的数据表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()]; 

我怎样才能得到表中arraydtArray

+0

该拆分的目的是什么?在ASA/ASE数据库(Sybase产品)中,可能会基于某个列进行复制。我不是SQLServer专家,但也许SqlServer具有类似的功能? – Kamil 2013-02-27 13:30:29

+0

你写了_I需要将它拆分成多个数据表后_我应该得到3个表_你想拆分成多个数据库或表吗?你为什么想分组?你只需通过where clausole来过滤表格 – Max 2013-02-27 13:31:31

使用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

如果你知道COLUMN_1的确切名称,你可以使用.Select.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