我无法让这段代码正常工作。
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);
答案 0 :(得分:7)
DataTable
不是IEnumerable
,因此Select()
method that you're actually invoking完全不同;需要一个字符串。
有一种AsEnumerable()
方法可将DataTable
转换为IEnumerable<DataRow>
。
但是...... DataRow
没有Key
和Value
属性。所以,我不太清楚你在这里要做什么。您可以使用列访问器来构建字典。
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);