Ich versuche, eine Filtermethode für Entity Framework-Liste zu erstellen und besser zu verstehen, die Expression<Func<...
Entity Framework Filter „Expression <Func <T, bool>>“
ich eine Testfunktion wie diese haben.
public IQueryable<T> Filter<T>(IEnumerable<T> src, Expression<Func<T, bool>> pred)
{
return src.AsQueryable().Where(pred);
}
und wenn ich dies tun:
context.Table.Filter(e => e.ID < 500);
oder dies:
context.Table.Filter(e => e.SubTable.Where(et => et.ID < 500).Count() > 0 && e.ID < 500);
alles gut funktioniert.
Aber wenn ich dies tun:
context.Table.Filter(e => e.SubTable.Filter(et => et.ID < 500).Count() > 0 && e.ID < 500);
oder dies:
context.Table.Where(e => e.SubTable.Filter(et => et.ID < 500).Count() > 0 && e.ID < 500);
Ich erhalte einen Fehler. LINQ to Entities does not recognize the method ...Filter...
Warum funktioniert es in einem Fall und nicht im Addierer? Was sollte ich im Filter ändern, damit es mit verwandten Tabellen funktioniert? Ich bevorzuge es, mich von anderen externen Bibliotheken fern zu halten, denn ich möchte lernen, wie es funktioniert, und es in Zukunft in jedem Szenario verwenden können.
In den ersten beiden Fällen wird der Filter in der Datenbank korrekt ausgeführt.
durch viel Lesen und Versuch und Irrtum Ich vermutete, dass dies der einzige Weg war. wird es Fälle wie context.Table.Where (e => eTable.Any (MyFilter())); –
@ Pedro.The.Kid: Nein, wird es nicht. Das Ergebnis dieser Methode muss an das äußerste 'Where' übergeben werden, da jeder Ausdruck, den Sie an das äußerste' Where' übergeben, nicht wirklich ausgeführt, sondern interpretiert wird. –
Ich habe einen Test gemacht und das funktioniert var filter = MyFilter(); context.Table.Where (e => eTable.AsQueryable(). Beliebig (Filter)); –