我的网站在我的网站上使用了Subsonic 2.2。
我有一个奇怪的情况,我需要运行一些临时的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();
}
有人可以帮我吗?看来,我只想返回一个通用的字符串列表。
谢谢!
答案 0 :(得分: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)估值类型 b)具有无参数构造函数的类,因为该方法使用反射将结果中的列映射到类的属性
但是我之前写了一个扩展方法,它适用于字符串:
Use the Subsonic.Select() ExecuteTypedList Method with String
在链接中查看我自己的答案。
如果您将扩展方法添加到代码中,您可以执行以下操作:
List<String> result = DB.Select(User.Columns.UserName)
.From<User>()
.ExecuteTypedList();
答案 1 :(得分:3)
使用CodingHorror类。
以下是SubSonic 3的做法:http://www.subsonicproject.com/docs/CodingHorror
SubSonic 2的方式类似:
Dim ch As SubSonic.CodingHorror
ch.Execute("delete from @tablename", table)