Übergabe eines Ausdrucks an eine Linq-Abfrage verhält sich je nach Syntax unterschiedlich, und ich frage mich, warum dies der Fall ist.Linq wo Schlüsselwort vs. Where Erweiterung und Ausdruck Parameter
Lassen Sie uns sagen, ich habe diese sehr allgemeine Funktion
private IEnumerable<Company>
GetCompanies(Expression<Func<Company, bool>> whereClause)
Die folgende Implementierung als
private IEnumerable<Company>
GetCompanies(Expression<Func<Company, bool>> whereClause)
{
return (from c in _ctx.Companies.Where(whereClause) select c);
}
Aber das nächste Implementierung dauert nicht nicht kompilieren (Delegate ‚System.Func‘ erwartet funktioniert 1 Argumente)
private IEnumerable<Company>
GetCompanies(Expression<Func<Company, bool>> whereClause)
{
return (from c in _ctx.Companies where whereClause select c);
}
Offensichtlich Ich kann nur die erste Syntax verwenden, aber ich habe mich nur gewundert, warum der Compiler das where-Schlüsselwort nicht wie die Where-Erweiterung behandelt?
Danke, Thomas
Wenn Sie Func als Argument anstelle von Expression > akzeptieren würden, hätten Sie Prädikat als Parametertyp verwenden können. –
Ja, das ist ein vereinfachtes Beispiel, nur um sich auf die Unterschiede zu konzentrieren. Der Grund für die Verwendung eines Ausdrucks> ist, dass ich möchte, dass der Speicherort in der Datenbank und nicht im Speicher ausgeführt wird. –