0

私は2つのテーブルを持っています:AとB

B {B1:フィールド1、B2:フィールド2、...}

A {子:Bのリスト、A1:Field1、A2:Field2、}

次のような関連する「B」エンティティを持つ「A」エンティティを取得したい:

DataContext.A.Select(a => new MySubset(A1 = a.A1、Children = a.Children.Select(b => b.B1)。ToList());

ただし、EFはToListをSQLに変換できないため、クエリでインスタンスごとにToList()を呼び出して、追加のネットワーク呼び出しを生成する必要があります。

どうすればこれを回避できますか?

前もって感謝します。

4

2 に答える 2

0

MySubsetのコンストラクターでは、Listの代わりにIEnumerableを使用します。

または:.ToList()ではなく、new List<T>(a.Children.Select(b => b.B1))

于 2010-05-01T15:38:08.713 に答える
0

.Includeステートメントを使用して熱心な読み込みを行うことができます。

http://msdn.microsoft.com/en-us/library/bb896272.aspx

説明

VS2010 を使用していて、遅延読み込みが有効になっていると仮定します。

最初に A をロードすると、明らかに A から待っている B のコレクションがありますが、実際には List<> ではなく、要求時に B を提供する方法を知っているオブジェクトです。このコレクションにアクセスする場合にのみ、EF はデータベースへのラウンド トリップを実行して取得します。

ただし、.Include() を使用すると、A を取得すると同時に B を取得するように要求できます。

于 2010-05-01T16:33:27.460 に答える