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

时间:2009-05-22 03:21:14

标签: c# .net 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();

解答:

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

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);

1 个答案:

答案 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);