Я пытаюсь использовать 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);
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);