C# 将数据表拆分为多个数据表

C# 将数据表拆分为多个数据表,c#,linq,C#,Linq,这些是我的数据表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

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

所以在本例中,我应该得到3个表(一个表的所有行都是
secu 1
,另一个表的所有行都是
secu 2
,另一个表的所有行都是
secu 3

我试过这个:

var dtArray = dtAllData.AsEnumerable() 
                            .GroupBy(row => new
                            {
                                column_1 = (string)row["column_1"]
                            });
DataTable[] array = new DataTable[dtArray.Count()];

如何从
dtArray
获取
array
中的表?

使用
CopyToDataTable()
方法将数据获取到新的数据表中

var Result =  from x in dtAllData.AsEnumerable()
              where x.Field<string>("column_1") == "sec_1"
              select x;
DataTable t1 = Result.CopyToDataTable();
var Result=来自dtAllData.AsEnumerable()中的x
其中x.Field(“column_1”)=“sec_1”
选择x;
DataTable t1=Result.CopyToDataTable();

另一种方法是使用
LoadDataRow()
方法

如果您知道列_1的确切名称,可以使用
。选择(“列_1=sec_1”)
等。或者使用修改
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++;
}
var uniqueList=dtAllData.AsEnumerable().Select(x=>x.Field(“column_1”)).Distinct();
List myList=新列表();
myList=uniqueList.ToList();
DataTable[]数组=新的DataTable[myList.Count()];
int指数=0;
foreach(myList中的字符串项)
{
var Result=来自dtAllData.AsEnumerable()中的x
其中x.Field(“column_1”)==项
选择x;
DataTable=Result.CopyToDataTable();
数组[索引]=表;
索引++;
}

因此
数组
包含3个数据表,它们的
列_1的值不同

拆分的目的是什么?在ASA/ASE数据库(Sybase产品)中,可以基于某些列进行复制。我不是SQLServer专家,但SQLServer可能有类似的功能?你写我需要将它拆分成多个数据表,在我得到3个表后,你想拆分成多个数据库或表?你为什么要组队?您只需按位置筛选表即可。您可以查看我的一个相关信息吗?@kaf我在500万行的datatable中使用此解决方案,但我的内存不足异常,我可以帮助我避免此异常吗?我需要一个解决方案以内存优化的方式管理此问题。您可以查看我的一个相关信息吗?
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