Datatable todictionary有几列

时间:2016-07-29 06:42:55

标签: c# linq-to-sql todictionary

我正在尝试使用here描述的方法将数据表转换为字典,但是我收到错误

  

无法隐式转换类型   System.Collections.Generic.Dictionary>”至   “System.Collections.Generic.Dictionary``。

这个link有所帮助,但只有一个值被拉入字典,而不是几个我需要的值。

感谢您的帮助。

public class MCEAV
{
    public int ID { get; set; }
    public int BOOK_ID { get; set; }
    public double DATA { get; set; }
}

Dictionary<int, MCEAV> dctGREEKS = new Dictionary<int, MCEAV>();
dctGREEKS = DATActx.MONTECARLO_EAVs.Select(Z => new { Z.ID, Z.BOOK_ID, Z.DATA}).ToDictionary(Z => Z.ID);

2 个答案:

答案 0 :(得分:2)

使用new时需要指定类的名称,否则它是匿名类型:

dctGREEKS = DATActx.MONTECARLO_EAVs.Select(Z => 
                               new MCEAV()
                               { 
                                  ID = Z.ID, 
                                  BOOK_ID = Z.BOOK_ID, 
                                  DATA = Z.DATA
                               }).ToDictionary(Z => Z.ID);

所以new { Z.ID, Z.BOOK_ID, Z.DATA}是编译器创建的匿名类型的实例,而new MCEAV()是类型MCEAV的实例,这是你想要的字典。

答案 1 :(得分:2)

根据你的代码,我想你想要这样的东西。

var result = dt.AsEnumerable()
        .ToDictionary(x=>x.Field<int>("ID"), 
                      x=> new MCEAV() 
                      {
                          ID = x.Field<int>("ID"),
                          BOOK_ID = x.Field<int>("BOOK_ID"), 
                          DATA = x.Field<double>("DATA") 

                      });

选中此Example