2014-09-24 3 views
0

Я хочу рассчитать значения из datatable и показать это в другом datatable.Как я могу рассчитать строки, которые существуют в другом DataTable?

Например:

datatable1: Источник Таблица (Inputdatagrid)

положение | Значение

001  | 2 
002  | 1 
003  | 5 
001  | 1 

datatable2: Destination Table (Resultdatagrid)

001  | 3 // 2 + 1 
002  | 1 
003  | 5 

Так что я хочу сделать Еогеасп смотреть в каждой строке в первом Datatable, а затем я смотрю во второй таблице для значения положения. ... если значение позиции не существует, я создаю новую строку ... если значение позиции существует, я вычисляю значение wit +.

как я могу это сделать? могу ли я сделать это с помощью linq?

вот мой код:

... 

int datagrid_input_counter = InputDataGrid.Rows.Count -1; //Anzahl Zeilen wird bestimmt 

if (datagrid_input_counter > 0) 
{ 
    for (int i = 0; i < datagrid_input_counter; i++) 
    { 
     DataGridViewRow input_row = InputDataGrid.Rows[i]; // DataTable wird erstellt 

     string datagrid_input_position = Convert.ToString(input_row.Cells[0].Value); //Stelle Position 
     string datagrid_input_description = Convert.ToString(input_row.Cells[1].Value); //Stelle Beschreibung 
     string datagrid_input_sellvalue = Convert.ToString(input_row.Cells[2].Value); //Stelle ert Verkauf 

     //Add to Datatable 
    } 

    foreach (DataRow item in InputDataTable.Rows) 
    { 
     //How I get the result to ResultDatatable ???? 
    } 
} 
else 
{ 
    //Tabelle ist leer 
} 
+0

'Inputdatagrid' содержит две строки с' 001'. Вы хотите группировать по этим столбцам и суммировать все значения? Это сбивает с толку, потому что вы упоминаете вторую таблицу («Я смотрю во второй таблице для значения позиции» _), которую вы не показываете (кроме таблицы результатов). –

+0

да, я хочу сгруппировать это 001 и сделать сумму :) – Tarasov

+0

Почему вы упомянули вторую таблицу? –

ответ

0

Предполагая, что там на самом деле нет второй таблицы, но вы хотите сгруппировать по первой колонке и просуммировать все value сек вместо этого, вы можете использовать Linq-To-DataSet:

DataTable ResultDatatable = InputDataGrid.Clone(); // creates an empty table with the same columns 
var col1Groups = InputDataGrid.AsEnumerable() 
    .GroupBy(row => row.Field<string>(0)); 
foreach (var group in col1Groups) 
{ 
    DataRow newRow = ResultDatatable.Rows.Add(); 
    newRow.SetField(0, group.Key); 
    newRow.SetField(1, group.Sum(r => r.Field<int>(1))); // if it's not an int use int.Parse 
}