SubSonic Comment exécuter une instruction SQL?
-
02-10-2019 - |
Question
Mon site utilise Subsonic 2.2 sur mon site.
Je 1 étrange situation où je dois exécuter des instructions SQL ad hoc.
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();
}
Aide Quelqu'un peut-il me ici? Comme il semble, je veux juste retourner une liste générique de chaînes.
Merci!
La solution
Subsonic a une grande méthode appelée ExecuteTypedList () afin que vous puissiez faire somethink comme ça.
List<int> result = DB.Select(Table.Columns.Id)
.Distinct()
.From<Table>()
.OrderBy(Table.Columns.Id)
.ExecuteTypedList<int>();
ou même avec 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>();
Malheureusement, cette méthode ne fonctionne pas pour la chaîne car elle nécessite a) un valuetype b) une classe avec un constructeur sans paramètre puisque le procédé utilise la réflexion pour cartographier les colonnes à partir du résultat des propriétés de la classe
Cependant j'ai écrit une méthode prolongation il y a quelques temps que les travaux pour la chaîne:
Utilisation du Subsonic.Select () ExecuteTypedList Méthode avec String
Regardez ma propre réponse dans le lien.
Si vous ajoutez le extensionmethod à votre code que vous pouvez faire:
List<String> result = DB.Select(User.Columns.UserName)
.From<User>()
.ExecuteTypedList();
Autres conseils
Utilisez la classe CodingHorror.
Voici la 3 façon subsonique de le faire: http://www.subsonicproject.com/docs/ CodingHorror
Le 2 voies subsonique est similaire:
Dim ch As SubSonic.CodingHorror
ch.Execute("delete from @tablename", table)