Ich habe mit dem linq seine Func
Parameter (auf Entity Framework) herumspielen. Dann fand ich dieses Verhalten ausMehrere func Parameter für LINQ - EF
var idMatchQuery = new Func<MyClass, bool>(x => x.Id == someId);
var statusMatchQuery = new Func<MyClass, bool>(x => x.Status == someStatus);
/// works
var a = myClassEntity.FirstOrDefault(idMatchQuery);
/// doesn't work
var b = myClassEntity.FirstOrDefault(p => idMatchQuery(p) && statusMatchQuery(p));
/// doesn't work
var c = myClassEntity.FirstOrDefault(p => idMatchQuery(p) && p.Status == 1);
Es wirft UnsupportedOperationException
seit dem EF
nicht diese Abfragen erkennen. Ich könnte es viel einfacher akzeptieren, wenn keiner der oben genannten nicht funktionierte. Aber es nervt mich, wenn es mit einer einzigen Abfrage arbeitet, aber nicht mit Kombinationen mit anderen Abfragen.
Ich bin sicher, es gibt eine Erklärung dafür, aber ich denke, meine Suchbegriffe waren zu naiv für die Antwort, die ich suche.
Was ist die Erklärung für dieses Verhalten?
Ob die erste Version "funktioniert" ist fraglich, weil es in 'Enumerable.FirstOrDefault' Aufruf, nicht die' Queryable' auflöst, so wird es die gesamte Tabelle im Speicher vor dem Anwenden Ihrer Funktion, was ich denke nicht was du erwartest. –
Nun, wenn das der Fall ist, fühle ich mich jetzt nicht einmal in Ordnung. –