Ich verwende Dapper und einen Lambda-Ausdruck, um Daten aus der Datenbank abzurufen. Anstatt eine Menge überladener Ausdrücke zu erstellen, möchte ich ein einzelnes Datenbankobjekt übergeben und meinen Lambda-Ausdruck dem nächsten oder ersten gefundenen Objekt zuordnen.
public static User GetUser(User pUser)
{
using (IDbConnection connection = new SqlConnection(Connection))
{
return connection.Query<User>("SELECT * FROM dbo.USERS").(m => m == pUser);
}
}
Im obigen Beispiel können Sie sehen, dass ich ein "Benutzer" -Objekt in die Funktion übergebe, dieses Benutzerobjekt könnte 50% von dem sein, was das erwartete Objekt ist. Zum Beispiel, wenn das Objekt 2 Strings hat, die ID und der Name des Benutzers. Aber ich kannte nur den Benutzernamen. Ich würde einen neuen Benutzer als ref oder out param erstellen und die fehlende Daten in die Abfrage eintragen lassen.
Gedanken? Ich könnte eine Tonne überladene Funktionen mit Duplace-Code wie GetUserByID und GetUserByName erstellen, aber das scheint überflüssig.
Sie müssen die Abfrage neu schreiben. Stellen Sie bitte die Struktur von dbo.Users-Tabelle zur Verfügung.
Platzieren Sie die Filterlogik innerhalb der Abfrage und verwenden Sie Tabellenspalten, um Datensätze anstelle des gesamten Objekts abzugleichen.
public static User GetUser(User pUser)
{
using (IDbConnection connection = new SqlConnection(Connection))
{
return connection.Query<User>("Select * FROM dbo.Users where userID = @UserId", pUser).FirstOrDefault();
}
}