0

WCF サービス内で作成された List<Obj1> があります。Prop3 は実際には として実装されていますが、WCF から値を返すとコンテキストが失われ、そこに問題があるため、解決されたクエリをネットワーク経由で渡す必要IQueryableがあるためです。IEnumerableパフォーマンス上の理由から、SQL サーバー上で Prop3 のすべてのクエリを一度に実行できるようにしたいと考えています。現在、私はやっていますlist.ForEach(o => o.Prop3 = o.Prop3.ToArray())が、これは明らかにこれらのクエリを一度に 1 つずつ実行します。すべてをSQLサーバーに送信して一度に処理する方法はありますか?

明らかではないことの1つ:

builder.CreateObject returns an IQueryable<Obj1>

public IEnumerable<Obj1> CreateListOfObjects(IQueryable<Entity> query)
{
  List<Obj1> list = new List<Obj1>();
  foreach(var builder in Builders)
    list.AddRange(builder.CreateObject(query));
  }

  list.ForEach(o => o.Prop3 = o.Prop3.ToArray());
  return list.ToArray();
}

public class Obj1
{
  public string Prop1 {get;set;}
  public string Prop2 {get;set;}
  public IEnumerable<Obj2> Prop3 {get;set;}
}
4

2 に答える 2

1

問題が何であるかを完全に明確にしているかどうかはわかりませんが、IQueryable<T> ISであるIEnumerable<T>ため、インターフェイスの観点からは問題ないはずです。

この行:

list.ForEach(o => o.Prop3 = o.Prop3.ToArray());

クエリが s を遅延ロードしていることを示しているようで、を呼び出して sObj2を明示的にロードする必要があります。次のようなものを使用して s をロードするときに、 s を含める必要がある場合があります。Obj2ToArray()Obj2Obj1

list.AddRange(builder.CreateObject(query.Include("Prop3")));

モデル内のナビゲーション プロパティのProp3名前です (通常、複数形のエンティティ名)。

ノート

それが呼び出すのに最適な場所であるかどうかはわかりませんがInclude(おそらく、オブジェクト ビルダーではより意味があります)、提供されたコード内の最適な場所です。

于 2012-08-31T21:44:20.727 に答える
0

あなたはContains拡張メソッドを探しているようです。http://www.thinqlinq.com/Post.aspx/Title/Use-the-new-LINQ-Contains-extension-method-for-the-SQL-IN-clauseを参照してください。

于 2012-08-31T19:16:50.583 に答える