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