我在使这段代码正常工作时遇到麻烦。

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

10-07 18:58
查看更多