Ich versuche, von RedGate ftp://support.red-gate.com/ebooks/under-the-hood-of-net-memory-management-part1.pdfIst es möglich, benannte Methode innerhalb eines Anrufs zu Where?
Auf Seite 157-158 in diesem Buch einige Performance-Auswirkungen von Linq von diesem kostenlosen E-Book zu verstehen, schufen sie beispielsweise folgende.
Order[] pastDueAccounts = null;
DateTimedueDate = DateTime.Today.AddDays(-7);
using(varcontext = new Context())
{
pastDueAccounts = context.Accounts.Where(account => account.DueDate < dueDate).ToArray();
}
Sie dann Teil der Lambda-Ausdruck in die folgende Funktion neu berechnet.
public bool PastDueAccount(Account account)
{
return account.DueDate < DateTime.Today.AddDays(-7);
}
Schließlich verwendeten sie diese Funktion wie folgt.
Order[] pastDueAccounts = null;
using(varcontext = new Context())
{
pastDueAccounts = context.Accounts.Where(account => PastDueAccount(account)).ToArray();
}
Nach dem, was ich bisher erforscht, es ist nicht möglich, diese Linq-Abfrage als LINQ ausgeführt wird, das Verfahren nicht erkennen kann und nicht in einen Laden Ausdruck übersetzen werden. Ich frage mich, ob dieses Beispiel falsch ist und einfach nicht ausgeführt werden kann oder ob es mir nur schwer fällt, mich darüber zu informieren, wie man dieses Problem simuliert?
Dies ist falsch und wird nicht funktionieren, da dies kein Lambda-Ausdruck ist und nicht vom Abfrageanbieter ausgewertet werden kann. – casperOne
Ich habe buchstäblich das funktioniert gegen ein EF-Setup, das ich habe. – Gromer
Wenn es funktioniert, filtern Sie * auf dem Client * und der Aufruf von 'Where' bewertet die Ergebnisse von IEnumerable' und * not * übersetzt den Filter auf die Serverseite. Denken Sie daran, 'IQueryable ' leitet sich von 'IEnumerable ' ab, so dass alle Erweiterungsmethoden auf 'IEnumerable ' auf 'IQueryable ' funktionieren und es nicht immer offensichtlich ist, wo der Übergang auftritt. –
casperOne