【问题标题】:Update a datatable with reference key from another datatable使用来自另一个数据表的引用键更新数据表
【发布时间】:2014-07-10 12:32:32
【问题描述】:

我有一个数据表,比如“dtEmp”,其中包含 [EmployeeID][CompanyID][CompanyName] 列 另一个说“dtCompany”,列有[CompanyID][CompanyName]

我想用 [CompanyName] 列中的相应公司名称更新“dtEmp”

请指导。我试着搜索这个,但我找不到确切的词来搜索:(

【问题讨论】:

  • 在两个表上使用 CompanyId 连接。
  • 谢谢。加入返回我的组合结果。我不知道如何更新数据表'dtEmp'。我需要再次迭代还是有更好的方法

标签: c# linq datatable


【解决方案1】:

怎么样

for(int i = 0; i < dtCompany.Rows.Count; i++)
{
    for(int j = 0 ; j < dtEmp.Rows.Count ; j++)
    {
        if (Convert.ToString(dtCompany.Rows[i]["CompanyID"]) == 
            Convert.ToString(dtEmp.Rows[j]["CompanyID"]))
        {
            dtEmp.Rows[j]["CompanyName"] =
            Convert.ToString(dtCompany.Rows[i]["CompanyName"]);
        }                 
    }
}

【讨论】:

  • 是的@Nikhil。我懂了。我认为 linq/inner join 可能有更好的方法。或者我想太多了:P
  • @parixit:等我看看。
【解决方案2】:
var result = (from t1 in dtEmp
join t2 in dtCompany on t1.CompanyID equals t2.CompanyID
select new { t1.EmployeeID, t1.CompanyID, t2.CompanyName}).ToList()

我不知道您更新数据表的长期目的是什么,但是使用类似的方法会为您提供一个匿名对象列表,其中包含您需要的 3 个字段。您可能会将这些强制转换为强类型 Datarows,然后为每一行创建一个全新的表(或更新您现有的表)。

【讨论】:

    【解决方案3】:

    Linq 本身无法进行更新。
    假设 Typed DataTable,简单地说:

    foreach(var rowEmp in dtEmp)
    {
        var rowComp = dtCompany
                      .Where(r => r.CompanyID == rowEmp.CompanyID)
                      .FirstOrDefault();
        if(rowComp == null)
            rowEmp.SetCompanyNameNull();
        else
            rowEmp.CompanyName = rowComp.CompanyName;
    }
    

    (忽略内容为空或DBNull的情况,如果需要请做空检查。)

    类似的逻辑适用于一般的DataTable。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多