我想从数据表中计算值并在其他数据表中显示它。
例如:
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
}
答案 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
}