0

我正在尝试根据 DataTable 中的“ID”DataColumn 更新“Name”DataColumn。'ID'-'Name' 对存储在 Dictionary 中,它是使用 DataTable 扩展方法创建的,如下所示:

public static Dictionary<object, object> ToDictionary(this DataTable dataTable, string keyColumn, string valueColumn)
    {
        Dictionary<object, object> resultDict = new Dictionary<object, object>();

        if (dataTable.Columns.Contains(keyColumn) && dataTable.Columns.Contains(valueColumn))
        {
            foreach (DataRow dr in dataTable.Rows)
                if (resultDict.ContainsKey(dr[keyColumn]) == false)
                    resultDict.Add(dr[keyColumn], dr[valueColumn]);
        }

        return resultDict;
    }

我正在使用以下 LINQ 语法来更新 DataColumn:

misUserDetailsDT.AsEnumerable().ToList().ForEach(row => row.SetField("DepartmentName", deptDict[row["DepartmentID"]].ToString()));

这里的“misUserDetailsDT”是包含填充列“DepartmentID”和空列“DepartmentName”的 DataTable - 我正在尝试更新。

我有一个单独的方法生成字典如下:

var deptDict = departmentDT.ToDictionary("DeptID", "DeptName");

其中“departmentDT”是一个包含“DeptID”和“DeptName”列的数据表。

现在,当我执行 Linq 代码时,它会给出一个“KeyNotFoundException”。我已经彻底检查了“departmentDT”表和“deptDict”是否具有“misUserDetailsDT”表中的所有键(departmentID)。实际上,“departmentDT”本身是从“misUserDetailsDT”表的所有不同 ID 生成的。

我认为找出正确类型的 Dictionary 键存在一些问题。我什至尝试将其转换为 Int16,但没有成功。请帮我找出解决方案。

4

1 回答 1

1

I have figured out the problem. The code works when dictionary values are casted to Int32. Thanks to @TimSchmelter for giving a very useful info. I will be changing the code to make use of foreach loop instead.

于 2013-05-21T07:36:29.697 回答