Was wird dapper mit einem Prädikat machen?

c# dapper

Frage

Wenn ich eine Methode habe, die eine List of Dogs zurückgibt, konvertiert Dapper das Where Prädikat in eine SQL Where? oder bekommt es zuerst alle Hunde und filtert dann die Liste?

public IList<Dog> GetDogsBy(Func<Dog, bool> predicate)
{
    return db.Query<Dog>("SELECT * FROM Dog",null).Where(predicate).ToList();
}

Beliebte Antwort

Es hängt davon ab, welche Überladungsauflösung beim Auflösen des Where .

Wenn das Ergebnis des Aufrufs von Query eine List<Dog> und Sie using System.Linq; Direktive, und das Argument ist ein Delegat, dann wird das Where in der LINQ-to-objects-Version von Where . Die Select-Abfrage wird also auf dem Server ausgeführt, und dann wird das Where auf dem Client ausgeführt.

Wenn das Ergebnis der Query IQueryable<Dog> und das Argument ein Expression ist, wählt die Überladungsauflösung das Where , das mit der vorhandenen Abfrage kombiniert wird. Wenn diese Abfrage ausgeführt wird, wird Where auf welcher Seite auch immer ausgeführt, auf der die Abfrageanbieter sie ausführen möchten (normalerweise der Server).



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow