2009-06-13 5 views
0

Ich habe ein Modell, wo ein Produkt mehrere PriceDrops haben kann. Ich versuche, eine Liste von Produkten mit den letzten Preissenkungen zu erstellen.LINQ Select() Funktion wirft geladene Werte (loadoptions)

gibt es den neuesten Preis fällt mit den geladenen Produkten ist leicht genug, und ich dachte, es ist der beste Weg wäre, zu starten:

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

Funktioniert hervorragend für eine Liste der letzten Preissenkungen, aber ich will eine Liste von Produkten. Wenn ich ein ".Select (d => d.Product) angehängt habe" bekomme ich eine Liste von Produkten zurück - was perfekt ist - aber sie sind nicht mehr mit den PriceDrops verbunden. Das heißt, wenn ich .HasLoadedOrAssignedValues ​​für die Produkte aufruft, wird false zurückgegeben. Wenn ich versuche, die Preisdrops abzufragen, versucht es, für sie zurück in die DB zu gehen.

Gibt es eine Möglichkeit, oder muss ich eine Abfrage erstellen, die mit Products beginnt und nicht den Select-Modifikator verwendet? Ich habe versucht, das zu vermeiden, weil ich in einigen Fällen eine Liste von PriceDrops haben möchte, und ich wollte so viel Logik wie möglich wiederverwenden (ich habe die Where-Klausel und anderen Filtercode aus dem obigen Beispiel aus Gründen der Klarheit weggelassen).

Danke, Tom

Antwort

1

Probieren Sie die Produkte laden, indem ihre neuesten Price bestellt:

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

ich verstehe Ihre Frage, die Sie dies zu vermeiden, sind versucht, warum?

+0

Danke, das mache ich einfach. Ich habe versucht, es zu vermeiden, weil ich die gleiche Filterlogik (mehrere where-Klauseln) wiederverwenden wollte, als ich PriceDrops anfragte, wenn ich Produkte anfrage. Ich habe diese Klauseln aus Gründen der Klarheit weggelassen. –

+0

Ich denke, Sie könnten immer noch Instanzen mit gemeinsam genutztem Ausdruck weitergeben, die die Filterlogik darstellen, und sie einfach an der richtigen Stelle verwenden. – Avish

0

Ich denke, was Sie hier brauchen, ist die AssociateWith Methode, auch auf der DataLoadOptions-Klasse.

dlo.AssociateWith<Product>(p => p.PriceDrops.OrderBy(d=>d.CreatedTime))