2

Stock という名前のクラスがあり、価格の履歴セットである仮想 ICollection Prices があるとします。

在庫をフェッチし、在庫が具体化された後に価格を照会するが、mystock.Prices.OrderByDescending(px => px.Date).First() のようなフィルターを適用する場合、EF はすべての価格を内部的にロードしてから、フィルターを適用します。価格は大規模なコレクションになる可能性があるため、EF が私の where 基準に一致する価格をロードすることを本当に望んでいます。基本的に、クライアント側ではなくサーバー側でフィルタリングを適用します。

これを行うことは可能ですか?

ありがとう

4

1 に答える 1

2

可能ですが、この方法は、たまたま を実装している他のクラスではなく、Prices実際にであると想定できる場合にのみ機能します。サポートされているすべての EF シナリオでこれが当てはまるかどうかはわかりません。使用する関数はの関数です。EntityCollectionICollectionEntityCollectionCreateSourceQuery

((EntityCollection<Price>)stock.Prices).CreateSourceQuery().OrderByDescending(price => price.Date).First();

それがうまくいかない場合は、コンテキストに戻ってそこからクエリを実行することもできます。

(from price in context.Prices
 where price.StockId == stockId
 orderby price.Date descending
 select price).First();
于 2012-04-23T22:21:46.490 に答える