Ich habe eine Lösung, wo ich Self-Tracking-Entitäten mit den RTM-Vorlagen erstellt haben. Ich habe die Entitäten und den Kontext zwischen zwei Projekten aufgeteilt, damit ich die Typdefinitionen wiederverwenden kann, wenn ich Client/Server über WCF ausführen möchte.Entity Framework 4: Eager Laden (Include) mit Filtern mit Self-Tracking-Entities
Eine meiner Servicemethoden ist erforderlich, um ein Diagramm von "Product" -Objekten mit untergeordneten Objekten von "ProductSku" zurückzugeben, und diese wiederum haben untergeordnete Objekte von "ProductPrice". Die Auswahlkriterien lauten auf die Eigenschaft "Name" des Objekts "Produkt" und die Eigenschaft "FinancialPeriodID" des "ProductPriceObject". Momentan schließe ich den Namen nicht in die Suche ein, aber ich habe Probleme, den Graphen zurückzubringen.
Wenn ich einfach die folgende Abfrage ausführen (beachten Sie, wird diese Syntax von LinqPad eher als der tatsächlichen Anwendungscode genommen) ...
from product in Products.Include("Skus.PriceHistory")
select product
... dann bin ich in der Lage, die volle Objektgraph abrufen Für die Artikel, die ich benötige, gibt es an dieser Stelle natürlich keinen Filter.
Wenn stattdessen stelle ich den Filter wie folgt ...
from product in Products.Include("Skus.PriceHistory")
join sku in ProductSkus on product.ID equals sku.ProductID
join price in ProductPrices on sku.ID equals price.ProductSkuID
where price.FinancialPeriodID == 244
select product
... was ich erwarte zurück zu erhalten, ist das „Produkt“ Objekte, das Kind „productSku“ Objekte (die in sind die "Skus" -Kollektion des "Produkts") und ihre "ProductPrice" -Objekte (die in der "PriceHistory" -Sammlung des "ProductSku" enthalten sind) - aber ich bekomme nur die "Product" -Objekte zurück, die "Skus" -Kollektion leer.
ich auch als Codierung die Abfrage versucht haben ...
from product in Products.Include("Skus.PriceHistory")
from sku in product.Skus
from price in sku.PriceHistory
where price.FinancialPeriodID == 244
select product
... aber das macht keinen Unterschied, entweder.
Offensichtlich muss ich etwas falsch machen. Kann irgendjemand etwas Licht auf das, was das ist, werfen, so wie ich es schon seit Stunden getan habe und jetzt im Kreis herumlaufe?
Sorry „SKUs“ und „Preisentwicklung“ beiden Sammlungen, so ist es nicht möglich, Navigieren Sie in einer einzigen Anweisung den gesamten Pfad entlang. Ich fürchte, es gibt keine andere Möglichkeit, als die Joins entweder mit Join oder mit From aufzunehmen, wie in den beiden Beispielen gezeigt. Danke trotzdem. –
Das hat @MartinRobins vielleicht nicht geholfen, aber es hat mir bei meinem eigenen Projekt geholfen! +1 Diese Syntax funktionierte für mich (vielleicht völlig anders Setup als ursprüngliche Frage, ich weiß nicht ...) – BenSwayne