2009-05-22 2 views
2

Linqを使用して、DBクエリから各行を、カスタム型をその値として持つ辞書に投影しようとしています。これを行うには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(); 

ANSWER:

おかげでジェイソン。私は、コンストラクタではなく、プロパティと自動初期化子を使用しました。

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); 
に変更します。
関連する問題