2009-06-13 5 views
0

私は、Productが複数のPriceDropを持つモデルを持っています。私は最新の価格下落の製品のリストを生成しようとしています。LINQ Select()関数はロードされた値を破棄します(loadoptions)

最新の価格がロードされた製品で降下取得することは十分に簡単である、と私はそれを起動するための最良の方法だろうと思った:

dlo.LoadWith<PriceDrop>(pd => pd.Product); 
db.LoadOptions = dlo; 
return db.PriceDrops.OrderBy(d=>d.CreatedTime); 

は、最近の価格下落のリストのための素晴らしい作品が、私はしたいです製品のリスト「.Select(d => d.Product)」を追加すると、完璧な製品リストが返されますが、これらの商品はPriceDropsに関連付けられなくなりました。つまり、製品の.HasLoadedOrAssignedValuesを呼び出すと、falseが返されます。私がPrice Dropsを調べようとすると、彼らは彼らのためにDBに戻ろうとします。

この問題を回避する方法はありますか、または「選択」修飾語を使用せずに「製品」から始まるクエリを作成する必要がありますか?私はそれを避けようとしていました。PriceDropsのリストが必要な場合があり、できるだけ多くのロジックを再利用したかったからです(わかりやすくするために、上記のサンプルからwhere節と他のフィルタコードを除外しました)。

おかげで、 トム

答えて

1

彼らの最新PriceDropが注文した製品を、ロードしてみてください。

dlo.LoadWith<Product>(p => p.PriceDrops); 
db.LoadOptions = dlo; 
return db.Products.OrderBy(d => d.PriceDrops.Max(pd => pd.CreatedTime)); 

私はあなたが、なぜこの問題を回避しようとしているあなたの質問から理解できますか?

+0

ありがとう、私はそれをやります。商品を照会しているときにPriceDropsを照会していたときに、同じフィルタリングロジック(複数のwhere節)を再利用したかったので、私はそれを避けようとしていました。わかりやすくするために、これらの節を省いた。 –

+0

私はあなたがまだフィルタリングロジックを表す共有Expressionインスタンスを渡して、適切な場所でそれらを使うことができると思います。 – Avish

0

ここで必要なのは、AssociateWithメソッドで、DataLoadOptionsクラスにもあると思います。

dlo.AssociateWith<Product>(p => p.PriceDrops.OrderBy(d=>d.CreatedTime)) 
関連する問題