使用另一个数据表中的引用键更新数据表

时间:2014-07-10 12:32:33

标签: c# linq datatable

我有一个数据表,说' dtEmp',列[EmployeeID][CompanyID][CompanyName] 另一个人说'dtCompany'列[CompanyID][CompanyName]

我想更新' dtEmp'在[CompanyName]

中列出相应的公司名称

很好的指南。我试着搜索这个,但我找不到确切的搜索词:(

3 个答案:

答案 0 :(得分:0)

怎么样

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"]);
        }                 
    }
}

答案 1 :(得分:0)

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,然后为每行创建一个全新的表(或更新现有的表)。

答案 2 :(得分:0)

Linq本身无法做更新。
假设键入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;
}

(忽略具有null或DBNull的内容的情况,请在需要时进行空检查。)

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