2009-05-22 53 views
2

我正在嘗試使用Linq將數據庫查詢中的每一行投影到具有自定義類型作爲其值的字典中。我不確定LINQ語法來做到這一點?如何使用Linq to SQL將項目投影到具有自定義類型的字典?

這是我目前的嘗試(不編譯,但應該證明我正在嘗試做什麼)。我在'選擇新的...'部分遇到問題。

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

回答

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); 
相關問題