C# 将具有单列的数据表转换为以索引为键的字典
简单的问题。我有一个C# 将具有单列的数据表转换为以索引为键的字典,c#,linq,C#,Linq,简单的问题。我有一个字典,我希望从列数据表中填充它。因此,对于具有单个列的数据表: 23.9 39009.0 32.99 12.1 我想要一本带有 { 1, 23.9 }, { 2, 39009.0 }, { 3, 32.99 }, { 4, 12.1 } 其中键是自动递增的。为此,我编写了一些基本代码: Dictionary<int, double> d = new Dictionary<int, double>(); List<double> tmp
字典
,我希望从列数据表
中填充它。因此,对于具有单个列的数据表
:
23.9
39009.0
32.99
12.1
我想要一本带有
{ 1, 23.9 },
{ 2, 39009.0 },
{ 3, 32.99 },
{ 4, 12.1 }
其中键是自动递增的。为此,我编写了一些基本代码:
Dictionary<int, double> d = new Dictionary<int, double>();
List<double> tmp = dataTable.AsEnumerable()
.Select(c => Double.Parse(c[i].ToString())).ToList();
int index = 1;
foreach (var j in tmp)
d.Add(index++, j);
Dictionary d=newdictionary();
List tmp=dataTable.AsEnumerable()
.Select(c=>Double.Parse(c[i].ToString()).ToList();
int指数=1;
foreach(tmp中的var j)
d、 添加(索引++,j);
我可以用LINQ通过一个查询来实现这一点吗?我不是一个LINQ迷,他喜欢为了它而写它,但我确实喜欢提高我的LINQ技能,而且我似乎无法找到一种使用单个LINQ查询的方法,尽管这是可能的
谢谢你抽出时间
我可以用LINQ通过一个查询来实现这一点吗
对
Dictionary dict=dataTable.AsEnumerable()
.Select((行,索引)=>new{row,index})
.ToDictionary(x=>x.index+1,x=>x.row.Field(0));
您可以尝试以下方法:
d = tmp.Select( ( x, i ) => new { Value = x, Index = i } ).ToDictionary( pair => pair.Index, pair => pair.Value );
有些人可能会觉得这更简单
int index = 1;
Dictionary<int, double> dict = dataTable.AsEnumerable().ToDictionary(x=>index++, x => x);
int索引=1;
Dictionary dict=dataTable.AsEnumerable().ToDictionary(x=>index++,x=>x);
将x=>x
替换为从元素到所需的双精度值
(例如
x=>x.row.Field(0)
如果它是一个只有一列的数据表)这很好。我不熟悉new{row,index}
在这里做什么。你能详细说明一下吗?这就是所谓的类似于没有名字的类。它有两个属性(在本例中):行
和索引
,类型正确(DataRow
+int
)。我需要在ToDictionary
中同时使用这两个选项。但是因为只有(和其中)有一个重载,它为我提供了序列中元素的索引,我需要以某种方式将其持久化。@Killercam-Tim正在使用select来创建一个新类型,该类型在投影序列中同时具有这两个值。我想这让人困惑的是编译器如何足够聪明地派生来自new{…}
语句的匿名类型。在这种情况下,解析器必须从.ToDictionary(…)
语句中删除它…@Killercam:no,编译器从new{row,index}
获取它。但是对于数据表
没有扩展方法ToDictionary
。如果使用aseneumerable()
,这甚至是不可能的。我将其编辑为使用aseneumerable()
,因为我的测试在列表中,而不是表中。
int index = 1;
Dictionary<int, double> dict = dataTable.AsEnumerable().ToDictionary(x=>index++, x => x);