SubSonic如何执行SQL语句?

aro*_*ron 2 subsonic adhoc-queries subsonic2.2

我的网站在我的网站上使用Subsonic 2.2.

我有一个奇怪的情况,我需要运行一些特殊的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();

}
Run Code Online (Sandbox Code Playgroud)

有人能帮我一下吗?看来,我只想返回一个通用的字符串列表.

谢谢!

Jür*_*ock 6

Subsonic有一个很棒的方法叫做ExecuteTypedList(),所以你可以这样做.

List<int> result = DB.Select(Table.Columns.Id)
  .Distinct()
  .From<Table>()
  .OrderBy(Table.Columns.Id)
  .ExecuteTypedList<int>();
Run Code Online (Sandbox Code Playgroud)

甚至与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>();
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个方法不适用于字符串,因为它需要a)一个值类型b)一个带有无参数构造函数的类,因为该方法使用反射将结果中的列映射到类的属性

但是我前一段时间写了一个适用于字符串的扩展方法:

使用带有String的Subsonic.Select()ExecuteTypedList方法

在链接中查看我自己的答案.

如果您将扩展方法添加到代码中,您可以执行以下操作:

 List<String> result = DB.Select(User.Columns.UserName)
                         .From<User>()
                         .ExecuteTypedList();       
Run Code Online (Sandbox Code Playgroud)