40

次のようなEF/LinqクエリからKeyValuePairsのリストをロードしようとしています:

return (from o in context.myTable 
select new KeyValuePair<int, string>(o.columnA, o.columnB)).ToList();

私の問題は、これがエラーになることです

「LINQ to Entities では、パラメーターなしのコンストラクターと初期化子のみがサポートされています。」

これを回避する簡単な方法はありますか?KeyValuePair を使用する代わりに、このためのカスタム クラスを作成できることはわかっていますが、それは車輪の再発明のように思えます。

4

3 に答える 3

84

テーブルから columnA と columnB のみを選択し、メモリ内でさらに処理を進めます。

return context.myTable
              .Select(o => new { o.columnA, o.columnB }) // only two fields
              .AsEnumerable() // to clients memory
              .Select(o => new KeyValuePair<int, string>(o.columnA, o.columnB))
              .ToList();

KeyValuePairs を含む辞書を作成することも検討してください。

return context.myTable.ToDictionary(o => o.columnA, o => o.columnB).ToList();
于 2013-06-25T15:59:10.327 に答える
10

LINQ to Entities は をサポートしていないため、最初に次KeyValuePairを使用して LINQ to Object に切り替える必要があります。AsEnumerable

return context.myTable
              .AsEnumerable()
              .Select(new KeyValuePair<int, string>(o.columnA, o.columnB))
              .ToList();
于 2013-06-25T15:58:06.420 に答える