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!

Était-ce utile?

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top