Как проецировать в словарь с пользовательским типом, используя Linq to SQL?

2

Я пытаюсь использовать Linq для проецирования каждой строки из запроса БД в словарь, для которого пользовательский тип имеет значение. Я не уверен в синтаксисе LINQ для этого?

Это моя текущая попытка (которая не компилируется, но должна демонстрировать, что я пытаюсь сделать). У меня возникают проблемы с частью "select new...".

public class MyClass
{     
   public Dictionary<int, CustomType> dict;
}

public class MyType{        
   string Name;
   decimal Value;
}

var result = (from t in table
              select new {
                 t.Id,
                 new MyType(t.Name,t.Value)
              }).AsEnumerable().ToDictionary();

Ответ:

Спасибо Джейсону. Я просто использовал свойства и автоматические инициализаторы, а не конструктор. Рабочий код напоминает это (любые улучшения в этом приветствуются):

public class MyType {        
    public string Name {get;set;}
    public decimal Value { get; set;}
}

Dictionary<int, CustomType> dict;

dict = (from t in table
        select new {
           id = av.Account.Id,
           mt = new MyType { Name = t.Name, Value = t.Value }
        }).ToDictionary(item => item.id, item => item.mt);
Теги:
linq

1 ответ

5
Лучший ответ

MyType не имеет конструктора, который принимает два аргумента.

Добавьте в определение MyType следующее:

public MyType(string name, decimal value) {
    Name = name; 
    Value = value;
}

Кроме того, вы не указали элемент анонимного типа, определенный

new MyType(t.Name, t.Value)

имя; попробуйте изменить эту строку на:

MyType = new MyType(t.Name, t.Value)

Компилятор будет кричать на вас, что он не может распознать имя для этого анонимного участника.

Наконец, нет перегрузки ToDictionary, у которой нет аргументов. Предполагая, что вы назвали анонимного члена выше MyType, измените вызов на ToDictionary на

....ToDictionary(item => item.Id, item => item.MyType);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню