【问题标题】:Datatable todictionary several columnsDatatable todictionary 几列
【发布时间】:2016-07-29 06:42:55
【问题描述】:

我正在尝试使用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);

【问题讨论】:

  • 如果您在MONTECARLO_EAVs 中有 1 个值,您将在字典中获得一个值。这很简单。

标签: c# dictionary linq-to-sql


【解决方案1】:

使用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 类型的实例,这就是你想要的字典。

【讨论】:

  • 谢谢!这让我发疯了,我有办法让代码工作。
【解决方案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

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多