如何将值添加到数据表C#中的特定列和行的值

How to add value to a value of certain clolumn and row in datatable C#

我有两个数据表:

1.dtEmployee:

|agent_id|agent_name|sum|

2.dtReport:

|sale_date|agent_id|sum |
------------------------

对于 dtReport 中的每条记录,我需要在 dtEmployee 中找到 agent_id 并将 dtReport["sum"] 的值添加到 dtEmployee["sum" ]:

foreach (DataRow r in dtReport)
{
    DataRow empRow = dtEmployee.find(dtReport["agent_id"]);
    empRow["sum"] += r["sum"];
}

有没有办法让我完成这个?

这可以通过多种方式实现。

选项 1:

foreach(DataRow row in dtEmployee.Rows)
{
    var update = dtReport.AsEnumerable().FirstOrDefault(r => r.Field<string>("agent_id") == row.Field<string>("agent_id"));

    if(update !=null)
    row.SetField<float>("sum",  update.Field<float>("sum"));      
} 

选项 2

另一种选择是通过加入 DataTables

来创建新的 table
var results = from t1 in dtEmployee.AsEnumerable()
              join t2 in dtReport.AsEnumerable() 
                on t1.Field<int>("agent_id") equals t2.Field<int>("agent_id")
              select new { t1, t2 };

// Now we can construct new DataTable

DataTable result = new DataTable() ;
result.Columns.Add("agent_id", typeof(System.Int32));
result.Columns.Add("Name", typeof(System.String));
result.Columns.Add("sum", typeof(float));

foreach(var dr in results )
{
    DataRow newRow = results.NewRow();
    newRow["agent_id"] = dr.t1.Field<int>("agent_id");
    newRow["agent_name"] = dr.t1.Field<string>("agent_name");
    newRow["sum"] = dr.t2.Field<float>("sum");

    // When all columns have been filled in then add the row to the table
    results.Rows.Add(newRow);
} 

工作sample

希望对您有所帮助!

像这样的东西有效:

private void AddValue(string agent_id, decimal sum)
{
    DataRow[] row= dtEmployee.Select("agent_id= '"+agent_id+"'"); 
    //since only one record with this agent_id, we take first record of array -> row[0]
    decimal dSum= Convert.ToDecimal(row[0][column]);
    dSum+= sum;
    row[0]["sum"] = dSum;
}

并将此函数插入​​循环:

foreach (DataRow r in dtReport)
{
    AddValue(r["agent_id"], r["sum"]);
} 

你可以尝试这样的事情。鉴于您的 agent_id 和总和是整数。

foreach (DataRow r in dtReport.Rows)
{
    dtEmployee.Select(string.Format("agent_id = {0}", r["agent_id"])).ToList<DataRow>().ForEach(
             v => { v["sum"] = (v.IsNull("sum") ? 0 : v.Field<int>("sum")) + (r.IsNull("sum") ? 0 : r.Field<int>("sum")); });
}

或等效代码

foreach (DataRow r in dtReport.Rows)
{
    DataRow[] empRow = dtEmployee.Select("agent_id = " + r["agent_id"]);
    for (int i = 0; i < empRow.Length; i++)
    {
        empRow[i]["sum"] = (empRow[i].IsNull("sum") ? 0 : (int)empRow[i]["sum"]) + (r.IsNull("sum") ? 0 : (int)r["sum"]);
    }
}