2

这些是我的数据表的内容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 中的内容将其拆分为多个数据表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

4

4 回答 4

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()方法。这是一个例子

于 2013-02-27T13:39:12.113 回答
0

如果您知道 column_1 的确切名称,您可以使用.Select .Select("column_1 = sec_1")等或使用DataView

于 2013-02-27T13:58:42.903 回答
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

于 2013-02-27T14:09:07.550 回答
-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
于 2016-09-06T14:43:06.177 回答