2013-07-31 2 views
0

У меня есть DataTable, содержащий динамическое число строк и динамическое количество столбцов,Как выбрать первый п число столбцов из DataTable

col1  col2  col3  col4............colN 
________________________________________________________________________ 
row1col1 row1col2 row1col3 row1col4........row1colN 
.   .    .  .    . 
.   .    .  .    . 
.   .    .  .    . 
.   .    .  .    . 
.   .    .  .    . 
.   .    .  .    . 
rowNcol1 rowNcol2 rowNcol3 rowNcol4.......rowNcolN 

Как выбрать данные из первого п числа столбцов из DataTable?

+0

Вы хотите совместить число столбцов в первом ряду? –

+0

нет, я хочу выбрать данные из первых 5 столбцов из datatable –

+1

Что вы подразумеваете под 'select' datatable.Columns свойство не помогает? Вы хотите выбрать данные или вы хотите отображать столбцы 'n'? –

ответ

1

, чтобы получить столбцы:

var tbl = new System.Data.DataTable(); 
var cols = tbl.Columns.Cast<System.Data.DataColumn>().Take(20); 

// если вы хотите, чтобы получить первые 20 столбцов ...

если вы хотите получить данные, тогда вам нужно пройти через столбцы, чтобы получить данные.

var data = cols.SelectMany (x => tbl.Rows.Cast(). Take (100) .Выбрать (y => y [x]));

конечно, это будет сбрасывать все данные в IEnumerable, если вы хотите использовать сильный объект напечатанного или список одномерного массива, считает, что это довольно просто, например:

вара data2 = cols.Select (x => tbl.Rows.Cast(). Возьмите (100). Выберите (y => y [x]). ToArray());

Если вы хотите сохранить текущую таблицу и резервное количество столбцов/строк, вы можете удалить остальные столбцы/строки:

 var tbl = new System.Data.DataTable(); 
     int totalColumnsToReserve = 20; 
     for (int i = tbl.Columns.Count - 1; i >= totalColumnsToReserve; i--) 
     { 
      tbl.Columns.RemoveAt(i); 
     } 

     int totalRowsToReserve = 100; 
     for (int i = tbl.Rows.Count - 1; i >= totalRowsToReserve; i--) 
     { 
      tbl.Rows.RemoveAt(i); 
     } 
+0

Этот запрос предоставляет столбцы в виде строк и снова в строке перечисляется, содержащий значения столбца. можно ли получить его в виде данных? –

0

Итерации по строкам и для каждой строки повторяются через n количество столбцов. Тем не менее, я не уверен, как вы хотите иметь дело с результатами.

Пример где п первое число столбцов:

var data = dataTable.AsEnumerable(); 
    const int n = 5; 
    foreach (var row in data) 
    { 
     for (int i = 0; i < n; i++) 
     { 
     var value = row[i]; 
     } 
    } 
0

Сначала получите массив DataRows с помощью select(), то доступ к каждой строке, как массив

DataTable DT = new DT(); 
DataRow[] rows = DT.Select(); 

foreach(DataRow row in rows) 
{ 
    for(int i =0; i<n; i++ 
    { 
      rows[i]; //do whatever you want with this 
    } 
} 
1

Вы можете использовать следующую функцию, чтобы получить первое n количество столбцов из DataTable; , где objSource является исходным значением DataTable и outputCols - это первые n столбцов. Если outputCols - < = 0 или> = общие столбцы в исходном DataTable, то он просто возвращает все столбцы.

private DataTable GetNColumnsFromDataTable(DataTable objSource, int outputCols) 
{ 
    DataTable objOutput = objSource.Copy(); 

    if (outputCols > 0 && outputCols < objSource.Columns.Count) 
    { 
     while (outputCols < objOutput.Columns.Count) 
     { 
      objOutput.Columns.RemoveAt(objOutput.Columns.Count - 1); 
     } 
    } 

    return objOutput; 
} 
Смежные вопросы