2009-03-10 2 views
2

この質問に続いて:私はDictionary<int, string>を返すようにしたいなぜToDictionary <K,V>()はLINQ to SQLで使用するとコンパイラエラーを生成しますか?

DomainID int
DomainName varchar(250)

Linq-to-SQL ToDictionary()

私はテーブルがDomainsと呼ばれる持っている、2つの列があります。私はSQLコードに次のLINQのいずれかをしようとすると:

Dictionary<int, string> dict = 
    dbc 
    .Domains 
    .Select(d => new {d.DomainID, d.DomainName}) 
    .AsEnumerable() 
    .ToDictionary<int, string>(k => k.DomainID, k => k.DomainName); 

または

Dictionary<int, string> dict = 
    (from d in dbc.Domains 
     select new { d.DomainID, d.DomainName }) 
     .AsEnumerable() 
     .ToDictionary<int, string>(k => k.DomainID, k => k.DomainName); 

私は以下のコンパイルエラーが出る:

Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<int>'

をここでのシナリオは同じようですq245168と動作するはずですが、私は何か明白なものを紛失していますか?

乾杯
ケヴ

答えて

2

は、ジェネリック型引数を削除してください。ここで

Dictionary<int, string> dict = 
(from d in dbc.Domains 
    select new { d.DomainID, d.DomainName }) 
    .AsEnumerable() 
    .ToDictionary(k => k.DomainID, k => k.DomainName); // <==== no angles 

、我々は詳細を提供するために、一般的な型推論を使用している:最初のではなく、キー、ソースです。

+0

Aaahh!今明らかです。感謝。 – Kev

+0

AsEnumerable()は必要ですか? – Svish

+0

@スヴィッシュ:そうではないようです。 – Kev

関連する問題