Ich versuche, Ergebnisse aus einer Datenbank mit Entity Framework CTP5 zu filtern. Hier ist meine derzeitige Methode.IQueryable <> dynamische Sortierung/Filterung mit GetValue schlägt fehl
IQueryable<Form> Forms = DataContext.CreateFormContext().Forms;
foreach(string header in Headers) {
Forms = Forms.Where(f => f.GetType()
.GetProperty(header)
.GetValue(f, null)
.ToString()
.IndexOf(filter,
StringComparison.InvariantCultureIgnoreCase) >= 0);
}
Allerdings habe ich festgestellt, dass GetValue nicht mit Entity Framework funktioniert. Es tut wenn der Typ if IEnumerable<>
aber nicht IQueryable<>
Gibt es eine Alternative, die ich verwenden kann, um den gleichen Effekt zu erzeugen?
Der Unterschied zwischen IEnumerable und IQueryable besteht darin, dass Linq for Objects (IEnumerable) Delegaten als Parameter akzeptiert und Code direkt ausführt, sodass alles, was kompiliert werden kann, möglich ist. EF verwendet IQueryable, und sein Ausdrucksparser hat Grenzen dafür, was er erkennen und analysieren kann. –