2013-02-27 5 views
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_1의 내용에 근거하여 여러 datatables으로 분할 할 필요가있다.

이 경우에 나는 3 개 테이블 (sec_2 & sec_3와 서로 다른 sec_1 모든 행을 가지고 하나를) 얻을 생각 해요.

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

가 어떻게 dtArray에서 array에 테이블을 얻을 수 있습니다

:

나는이 시도?

+0

분할의 목적은 무엇입니까? ASA/ASE 데이터베이스 (Sybase 제품)에서는 일부 열을 기반으로하는 복제가 가능합니다. SQLServer specialisty는 아니지만 SqlServer는 비슷한 기능을 가지고 있습니까? – Kamil

+0

당신은 쓰고 싶습니다 _ 여러 개의 데이터 테이블로 분할해야합니다 _ _ 나는 여러 개의 데이터베이스 또는 테이블로 분할하고자하는 테이블 세 개를 가져와야합니까? 그룹으로 묶는 이유는 무엇입니까? 당신은 단순히 clausole에 의해 테이블을 필터링합니다. – Max

답변

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() 방법을 사용하고 있습니다. 그래서

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++; 
} 

: 당신이 column_1의 정확한 이름을 알고 있다면 Here is an example

0

수정 Kaf의 솔루션을 사용할 수 있습니다, 내가 아니라 원하는 것을 달성 array은 다른 값이 column_1 인 데이터 테이블 3 개를 포함합니다.

-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 
관련 문제