SubSonic Как выполнить оператор SQL? - PullRequest
2 голосов
/ 02 июля 2010

Мой сайт использует Subsonic 2.2 на моем сайте.

У меня есть 1 странная ситуация, когда мне нужно выполнить некоторые специальные SQL-операторы.

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();

}

Может ли кто-нибудь помочь мне здесь?Как оказалось, я просто хочу вернуть общий список строк.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 02 июля 2010

Subsonic имеет отличный метод, называемый ExecuteTypedList (), так что вы можете сделать что-то подобное.

List<int> result = DB.Select(Table.Columns.Id)
  .Distinct()
  .From<Table>()
  .OrderBy(Table.Columns.Id)
  .ExecuteTypedList<int>();

или даже с 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>();

К сожалению, этот метод не работаетдля строки, так как для этого требуется a) тип значения b) класс с конструктором без параметров, поскольку метод использует отражение, чтобы отобразить столбцы из результата в свойства класса

Однако я написал метод расширения некоторое время назадэто работает для строки:

Используйте метод Subsonic.Select () ExecuteTypedList со строкой

Посмотрите на мой собственный ответ в ссылке.

ЕслиВы добавляете метод расширения в свой код, который можете сделать:

 List<String> result = DB.Select(User.Columns.UserName)
                         .From<User>()
                         .ExecuteTypedList();       
3 голосов
/ 02 июля 2010

Используйте класс CodingHorror.

Вот способ SubSonic 3 сделать это: http://www.subsonicproject.com/docs/CodingHorror

Способ SubSonic 2 аналогичен:

Dim ch As SubSonic.CodingHorror
ch.Execute("delete from @tablename", table)
...