在将DataTable转换为Dictionary时遇到问题

本文关键字:int 遇到 问题 DataTable 转换 Dictionary 在将 | 更新日期: 2023-09-27 18:17:20

我很难让这段代码工作。

DataTable dt = DataManager.GetSectionIdByEmail(test2PortalConnectionString, email);
Dictionary<int,int> clientViewIds = dt.Select(p => new {p.Key, p.Value })
     .AsEnumerable()
     .ToDictionary(kvp => kvp.key as int, kvp => kvp.Value as int);

我得到的错误是:无法将lambda表达式转换为类型'string',因为它不是委托类型

解决方案:我将AsEnumberable()放在语句中的错误位置,并且我需要处理数据行。

Dictionary<int,int> clientViewIds = dt.AsEnumerable()
   .Select(dr => new { Key = dr["SectionID"], Value = dr["SectionTypeID"] })
   .ToDictionary(kvp =>(int)kvp.Key, kvp => (int)kvp.Value);

在将DataTable转换为Dictionary<int,int>时遇到问题

DataTable不是IEnumerable,所以你实际调用的Select()方法是完全不同的;它接受字符串

有一个AsEnumerable()方法可以将DataTable转换为IEnumerable<DataRow>

但是…DataRow没有KeyValue属性。所以,我不太确定你在这里想做什么。您可以使用列访问器来构建字典。

dt.AsEnumerable().Select(dr => new { Key = dr["Key"], Value = dr["Value"] })
    .ToDictionary(kvp => (int)kvp.Key, kvp => (int)kvp.Value);

DataTable不支持使用lambda进行过滤,要么提供查询,要么不提供参数来获取所有行。

然后你可以提取你的数据:

Dictionary<int,int> clientViewIds = dt.Select()
  .Select(r => new { Key = r["A"], Value=r["B"] })
  .ToDictionary(kvp => kvp.Key as int, kvp => kvp.Value as int);