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) valuetype b) パラメーターなしのコンストラクターを持つクラスが必要なためです。メソッドはリフレクションを使用して結果の列をクラスのプロパティにマップするためです。
ただし、文字列に対して機能する拡張メソッドを少し前に作成しました。
Subsonic.Select() ExecuteTypedList メソッドを文字列で使用する
リンクで私自身の答えを見てください。
コードに拡張メソッドを追加すると、次のことができます。
List<String> result = DB.Select(User.Columns.UserName)
.From<User>()
.ExecuteTypedList();