Докуская как выполнить оператор SQL?
-
02-10-2019 - |
Вопрос
Мой сайт использует Subsonic 2.2 на моем сайте.
У меня есть 1 странная ситуация, когда мне нужно запустить некоторые адаптационные операторы 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();
}
Может кто-нибудь помочь мне здесь? Как кажется, я просто хочу вернуть универсальный список строк.
Спасибо!
Решение
Subsonic имеет отличный метод под названием ExecuteTyPedList (), чтобы вы могли сделать что-то, как это.
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>();
К сожалению, этот метод не работает для строки, поскольку он требует а) валютап б) класс с конструктором без параметра, поскольку метод использует отражение для отображения столбцов из результата к свойствам класса
Однако я написал метод расширения некоторое время назад, который работает для строки:
Используйте метод Subsonic.Select () ExecuteTypedList со строкой
Посмотрите на мой собственный ответ по ссылке.
Если вы добавите ExtensentMethod в свой код, вы можете сделать:
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)