Datatable todictionary несколько столбцов

Я пытаюсь преобразовать данные в словарь, используя метод, описанный здесь, но я получаю ошибку

Не удается неявно преобразовать тип System.Collections.Generic.Dictionary>'в'System.Collections.Generic.Dictionary``.

Эта ссылка помогла, но в словарь вставлено только одно значение, а не несколько, что мне и нужно.

Спасибо за любую помощь.

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 ответа

Решение

Вам необходимо указать имя класса при использовании 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 что вы хотите для своего словаря.

Исходя из вашего кода, я думаю, вы хотите что-то вроде этого.

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

Другие вопросы по тегам