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!

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top