Linqを使用してSQL(2008)の2つの列を(キャッシュ用の)辞書に適切に変換するにはどうすればよいですか?
現在、IQueryable b/cをループしています。ToDictionaryメソッドを機能させることができません。何か案は?これは動作します:
var query = from p in db.Table
select p;
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (var p in query)
{
dic.Add(sub.Key, sub.Value);
}
私が本当にやりたいのはこのようなものですが、うまくいかないようです:
var dic = (from p in db.Table
select new {p.Key, p.Value })
.ToDictionary<string, string>(p => p.Key);
しかし、私はこのエラーを受け取ります:「System.Linq.IQueryable」から「System.Collections.Generic.IEnumerable」に変換できません
var dictionary = db
.Table
.Select(p => new { p.Key, p.Value })
.AsEnumerable()
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
;
キーを定義するだけですが、値も含める必要があります。
var dic = (from p in db.Table
select new {p.Key, p.Value })
.ToDictionary(p => p.Key, p=> p.Value);
おかげで、あなたの答えは私がこれを修正するのに役立ちました:
var dic = db
.Table
.Select(p => new { p.Key, p.Value })
.AsEnumerable()
.ToDictionary(k=> k.Key, v => v.Value);
変換するためだけに、テーブル内のすべてのアイテムに匿名オブジェクトを作成するのはなぜですか?
単純に次のようなものを使用できます。IDictionary<string, string> dic = db.Table.ToDictionary(row => row.Key, row => row.Value);
TableとToDictionary()の間にAsEnumerable()呼び出しを含める必要がある場合があります。 db.Tableの正確なタイプがわかりません。
また、最初のサンプルを修正します。2番目のループ変数は宣言時と使用時に不一致です。