2

私のサイトでは Subsonic 2.2 を使用しています。

アドホック SQL ステートメントを実行する必要がある奇妙な状況が 1 つあります。

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

}

誰でもここで私を助けることができますか? ご覧のとおり、文字列の一般的なリストを返したいだけです。

ありがとう!

4

2 に答える 2

6

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();       
于 2010-07-02T19:56:52.620 に答える
3

CodingHorror クラスを使用します。

SubSonic 3 での方法は次のとおりです: http://www.subsonicproject.com/docs/CodingHorror

SubSonic 2 の方法も同様です。

Dim ch As SubSonic.CodingHorror
ch.Execute("delete from @tablename", table)
于 2010-07-02T07:21:21.333 に答える