我如何计算其他DataTable中存在的行?

时间:2014-09-24 08:50:39

标签: c# datagrid datatable rows datarow

我想从数据表中计算值并在其他数据表中显示它。

例如:

datatable1:源表(Inputdatagrid)

位置|值

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

datatable2:目标表(Resultdatagrid)

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

所以我想让foreach查看第一个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
}

1 个答案:

答案 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
}