无法将DataTable转换为Dictionary <int,int> </int,int>

时间:2013-06-06 18:03:40

标签: c# linq

我无法让这段代码正常工作。

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表达式转换为&#39; string&#39;因为它不是委托类型

解决方案:我在语句中的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);

2 个答案:

答案 0 :(得分:7)

DataTable不是IEnumerable,因此Select() method that you're actually invoking完全不同;需要一个字符串。

有一种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);

答案 1 :(得分:0)

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);