2010-07-01 78 views
2

我的網站在我的網站上使用Subsonic 2.2。SubSonic如何執行SQL語句?

我有一個奇怪的情況,我需要運行一些專門的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(); 

} 

任何人都可以幫我嗎?看起來,我只想返回一個通用的字符串列表。

謝謝!

回答

6

亞音速有)稱爲ExecuteTypedList(一個偉大的方法,所以你可以做somethink這樣。

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

甚至與波蘇斯:

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

但該方法不適合字符串,因爲它需要一個 )一個值類型 b)用無參構造函數的類工作,因爲該方法使用反射將結果中的列映射到類的屬性

不過我前一段時間寫了一個擴展方法,可以用於字符串:

Use the Subsonic.Select() ExecuteTypedList Method with String

看看我自己的鏈接答案。

如果添加extensionmethod到你的代碼,你可以這樣做:

List<String> result = DB.Select(User.Columns.UserName) 
         .From<User>() 
         .ExecuteTypedList();