2013-05-14 7 views
10

C#.NETの大きなテーブルからEntity Frameworkを使ってカップル 'ID'/'Name'のリストを抽出する必要があります。Entity Framework/LINQを使用して特定のテーブルからTupleのリストを抽出するにはどうすればよいですか?

私はこの要求してみてください:

List<Tuple<int, string>> list = (from res in db.Resource 
           select new Tuple<int, string>(res.Resource_ID, res.Name)).ToList(); 

をしかし残念ながら、私はこのエラーを持っている:

のみパラメータなしのコンストラクタと初期化子はエンティティへのLINQでサポートされています。

私はこのフレームワークでこのタプルのリストをどのように抽出できますか?このエラーで少し失われてしまったと思います。 私の問題を理解し解決するのを手伝ってもらえますか?

敬具、

アレックス

答えて

15

あなたは匿名型選択することで、中間段階でそれを行うことができます:タプルを作成

db.Resource.Select(x => new { x.Resource_ID, x.Name }).AsEnumerable().Select(x => Tuple.Create(x.Resource_ID, x.Name)).ToList(); 

はエンティティへのLINQでサポートされている操作ではありませんしたがって、匿名のタイプを選択する必要があります。これは、次のものと同等になります。

SELECT [Resource].[Resource_ID], [Resource].[Name] 

次にLINQ to Objectsに移動してAsEnumerableとタプルを取得してください。

+0

+1 DBから転送されるデータ量を減らすために匿名型を使用する場合+1。 – juharr

+0

私はそれがどのように動作するか理解し始めていると思います。ありがとうございました。 – Alex

2

あなたはdb.Resourceからリストを作成し、この制限を消去するコレクションにLINQを使用することができます。

var list = db.Resource.ToList().Select(res => Tuple.Create(res.Resource_ID, res.Name)); 

Tupleクラスは(8つの項目まで)いくつかのコンストラクタを持っていますが、Create()ヘルパーメソッドを作ります創造はより簡単です。

+1

+1 :)私のために働いたダッド。 – QMaster

+0

よかった、それがあなたを助けてくれてうれしいです。 –

+1

@fuexわかりやすい。ありがとう – Rama

関連する問題