Filtern der Navigationseigenschaften in EF Code First

Ich verwende Code First in EF. Angenommen, ich habe zwei Entitäten:

public class Farm
{
    ....
    public virtual ICollection<Fruit> Fruits {get; set;}
}

public class Fruit
{
    ...

}

Mein DbContext sieht ungefähr so ​​aus:

public class MyDbContext : DbSet
{
    ....
    private DbSet<Farm> FarmSet{get; set;} 

    public IQueryable<Farm> Farms
    {
        get
        {
            return (from farm in FarmSet where farm.owner == myowner select farm);
        }
    }
}

Ich mache dies, damit jeder Benutzer nur seine Farmen sehen kann und ich nicht bei jeder Abfrage das Where an die Datenbank aufrufen muss.

Jetzt möchte ich alle Früchte einer Farm filtern. Ich habe Folgendes ausprobiert (in der Farm-Klasse):

from fruit in Fruits where fruit .... select fruit

Die generierte Abfrage enthält jedoch nicht die where-Klausel, was sehr wichtig ist, da ich zehntausende von Zeilen habe und nicht effizient genug bin, um sie alle zu laden und zu filtern, wenn es sich um Objekte handelt.

Ich habe gelesen, dass faul geladene Eigenschaften beim ersten Zugriff gefüllt werden, aber ALLE Daten gelesen werden. Es können keine Filter angewendet werden, es sei denn, Sie tun etwas in der Art:

from fruits in db.Fruits where fruit .... select fruit

Aber ich kann das nicht tun, weil Farm keine Kenntnisse über DbContext hat (ich denke nicht, dass es sollte (?)), Aber auch für mich verliert es nur den ganzen Zweck der Verwendung von Navigationseigenschaften, wenn ich mit allen Daten arbeiten muss und nicht nur der, der zu meiner Farm gehört.

So,

Mache ich etwas falsch / mache ich falsche Annahmen?Kann ich auf irgendeine Weise einen Filter auf eine Navigationseigenschaft anwenden, die für die echte Abfrage generiert wird? (Ich arbeite mit vielen Daten)

Danke fürs Lesen!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage