subsonic SQLステートメントを実行する方法は?
-
02-10-2019 - |
質問
私のサイトは私のサイトで亜音速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();
}
誰かがここで私を助けることができますか?見た目のように、文字列の一般的なリストを返したいだけです。
ありがとう!
解決
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)a)a valueType b)パラメーターのないコンストラクターを使用するクラスは、メソッドが反射を使用して結果から列をクラスのプロパティにマッピングするためです。
しかし、私はしばらく前に文字列に役立つ拡張法を書きました:
subsonic.select()executeTypedListメソッドを文字列で使用します
リンクの私自身の答えを見てください。
拡張機能をコードに追加すると、次のことができます。
List<String> result = DB.Select(User.Columns.UserName)
.From<User>()
.ExecuteTypedList();
他のヒント
CodingHorrorクラスを使用します。
これがそれを行う亜音速の3つの方法です: http://www.subsonicproject.com/docs/codinghorror
亜音速の2つの方法は似ています:
Dim ch As SubSonic.CodingHorror
ch.Execute("delete from @tablename", table)
所属していません StackOverflow