我正在尝试使用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);
答案 0 :(得分: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);