如何使用Linq to SQL投影到具有自定义类型的字典?

dan*_*dan 2 .net c# sql linq

我试图使用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();
Run Code Online (Sandbox Code Playgroud)

回答:

谢谢杰森.我只是使用属性和自动初始化器而不是构造函数.工作代码类似于此(欢迎任何改进):

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);
Run Code Online (Sandbox Code Playgroud)

jas*_*son 5

MyType 没有带两个参数的构造函数.

将以下内容添加到以下定义中MyType:

public MyType(string name, decimal value) {
    Name = name; 
    Value = value;
}
Run Code Online (Sandbox Code Playgroud)

此外,您没有给出定义的匿名类型成员

new MyType(t.Name, t.Value)
Run Code Online (Sandbox Code Playgroud)

一个名字; 尝试将该行更改为:

MyType = new MyType(t.Name, t.Value)
Run Code Online (Sandbox Code Playgroud)

编译器会对你大喊大叫它无法识别这个匿名成员的名字.

最后,没有一个ToDictionary没有参数的重载.假设您将上述匿名成员命名为MyType,请将呼叫更改ToDictionary

....ToDictionary(item => item.Id, item => item.MyType);
Run Code Online (Sandbox Code Playgroud)