Ich arbeite an einem Projekt für eine Datenbankzugriffsschicht und habe beschlossen, Linq to SQL dafür zu verwenden. Eines der Dinge, die ich tun wollte, war die Bereitstellung einer API, die Linq-Ausdrücke als Argumente zum Abrufen von Daten verwenden kann. Zum Beispiel habe ich jetzt diese API geschrieben, die wie folgt aussieht:
public Result GetResults(System.Linq.Expressions.Expression<Func<Result, bool>> predicate)
{
Result result = db.Results.SingleOrDefault(predicate);
return result;
}
Mit dieser API können Sie dann die Datenbank nach einer Ergebniszeile abfragen, die z. B. bestimmte Bedingungen erfüllt:
Result result = Provider.GetResults(r => r.ID == 11);
Das funktioniert sehr gut. Ich bin in der Lage, die eine Zeile zu erhalten, die ich basierend auf meinen Bedingungen möchte.
Der nächste Schritt bestand darin, mehrere Objekte aus der Datenbank zurückzuholen.
Ich habe es folgendermaßen hinbekommen:
public List<Result> GetResults(System.Linq.Expressions.Expression<Func<Result, bool>> predicate)
{
List<Result> results = db.Results.Select(r => r).Where(r => r.ID == 11).ToList<Result>();
return results;
}
Wie Sie sehen können, rufe ich ein Select mit r => r auf, das mir alles zurückgibt, und dann verwende ich ein Where, um zu filtern, was ich brauche.
Es funktioniert... aber irgendetwas sagt mir, dass ich es wirklich hässlich mache. Ich könnte mich irren, aber zieht das nicht ALLES aus der Ergebnistabelle und filtert es dann? oder stellt es die richtige SQL-Anweisung zusammen, die auf Datenbankebene filtert?
Wie auch immer... Ich würde sehr schätzen einige Anleitung, wie ich diese Aufgabe zu bewältigen. Wie schreibe ich eine API, die einen Linq-Ausdruck als Argument nimmt und gibt eine Reihe von Objekten aus der Datenbank auf der Grundlage dieses Ausdrucks.
Gracias.