Ich arbeite mit einem DB-Schema, in dem Datensätze bei der Aktualisierung nicht überschrieben werden. Stattdessen wird eine neue Kopie des Datensatzes hinzugefügt und als "aktuell" markiert.Entity Framework - Eager Laden mit Filter?
Zum Beispiel:
Id | Current | Name | Owner
1 | false | Foo | Bar
1 | false | Foo | Bazz
1 | true | Foo | Buzz
In meinem Modell Ich habe eine Blog
Einheit, die viele Post
s im Zusammenhang mit ihm hat. Jeder Post
hat viele Comment
s mit sich bringen:
public class Blog
{
public int Id {get; set};
public bool Current {get; set};
public ICollection<Post> Posts {get; set;}
}
public class Post
{
public int Id {get; set};
public bool Current {get; set};
public ICollection<Comment> Comments {get; set;}
}
public class Comment
{
public int Id {get; set};
public bool Current {get; set};
}
Ich möchte eifrig seine eine Blog
mit allen Post
s laden und alle ihre Comment
s ähnlich wie in this example from MSDN:
using (var context = new BloggingContext()) { // Load all blogs, all related posts, and all related comments var blogs1 = context.Blogs .Include(b => b.Posts.Select(p => p.Comments)) .ToList(); }
Allerdings möchte ich nur DB-Datensätze enthalten, wo Current == true
. Wie kann ich dies mit LINQ-to-EF tun? Im Idealfall würde die Bedingung in die ON
Klausel gehen - ist das möglich?
Frage ist nicht sehr klar, was ist mit .Include (b => b.Posts.Select (p => p.Comments.Where (comment => comment.Current))) ?? –
@ a-t Danke. Was ist nicht klar? Ihr Vorschlag erstreckt sich nicht auf Blogs und Posts und gibt mir Folgendes: "Der Include-Pfadausdruck muss auf eine für diesen Typ definierte Navigationseigenschaft verweisen. Verwenden Sie gepunktete Pfade für Referenznavigationseigenschaften und den Navigationsoperator Select für die Sammlung." – urig