SubSonic Wie eine SQL-Anweisung ausführen?
-
02-10-2019 - |
Frage
Meine Seite verwendet Subsonic 2.2 auf meiner Seite.
Ich habe 1 seltsame Situation, wo ich brauche einige Ad-hoc-SQL-Anweisungen auszuführen.
public IList<string> GetDistincList(string TableName, string FieldName)
{
string sqlToRun = string.Format("SELECT DISTINCT {0} FROM {1} ORDER BY {0}", FieldName, TableName);
Query query = new Query(TableName);
query.PleaseRunThis(sqlToRun);
query.ExecuteReader();
}
Kann mir jemand helfen hier? Wie es scheint, möchte ich nur eine generische Liste von Strings zurück.
Danke!
Lösung
Subsonic hat eine große Methode namens ExecuteTypedList (), so dass Sie some wie dies tun können.
List<int> result = DB.Select(Table.Columns.Id)
.Distinct()
.From<Table>()
.OrderBy(Table.Columns.Id)
.ExecuteTypedList<int>();
oder sogar mit pocos:
public class UserResult
{
public int Id {get;set;}
public string Name {get;set;}
}
List<UserResult> users = DB.Select(
User.Columns.UserId + " as Id", // the as ... is only needed if your
User.Columns.UserName + " as Name" // column name differs from the
).From<User>() // property name of your class
.ExecuteTypedList<UserResult>();
Leider ist diese Methode nicht für String arbeiten, da es erfordert a) ein Valuetype b) eine Klasse mit einem parameterlosen Konstruktor, da die Methode verwendet Reflektion, um die Spalten aus dem Ergebnis auf die Eigenschaften der Klasse zuzuordnen
Allerdings habe ich eine Erweiterungsmethode eine Weile her, dass die Arbeiten für string:
Verwenden Sie die Subsonic.Select () ExecuteTypedList Methode mit String
Sehen Sie sich meine eigene Antwort in Verbindung.
Wenn Sie die Extension, um Ihren Code hinzufügen, können Sie tun:
List<String> result = DB.Select(User.Columns.UserName)
.From<User>()
.ExecuteTypedList();
Andere Tipps
Verwenden Sie die Coding Klasse.
Hier ist die SubSonic 3 Art und Weise tun: http://www.subsonicproject.com/docs/ Coding
Die SubSonic 2 Art und Weise ähnelt:
Dim ch As SubSonic.CodingHorror
ch.Execute("delete from @tablename", table)