2010-02-04 3 views
1

J'ai le code suivant dans une classe de base.Création d'une requête dynamique subsonique avec plusieurs clauses where

 MyApp.MyDB = new MyApp.MyDB(); 
     IRepository<T> repo = new SubSonicRepository<T>(db); 
     CurrentTable = repo.GetTable(); 



     var s = db.SelectColumns(columnList.ToArray()). 
       From(CurrentTable.Name). 
       OrderAsc(CurrentTable.Descriptor.Name); 

L'idée est que toutes mes classes peuvent appeler cette méthode. Je viens de me rendre compte que je pourrais avoir besoin d'une instruction 'where' et il pourrait y avoir de nombreux noms et valeurs de colonnes à tester.

Quelle est la meilleure approche pour cela?

MISE À JOUR: J'ai trouvé cela fonctionne ci-dessous mais est-ce la meilleure pratique?

//WhereClause is a Dictionary<string, string> 
     int count = 0; 
     foreach (var whereitem in WhereClause) 
     { 
      if (count == 0) 
      { 
       s.Where(whereitem.Key).IsEqualTo(whereitem.Value); 
      } 

      else 
      { 
       s.And(whereitem.Key).IsEqualTo(whereitem.Value); 
      } 

      count++; 
     } 

Répondre

1

Cela simplifie la logique légèrement: Pour la clause where, faire quelque chose comme ceci:

s.Where(1).IsEqualTo(1); 

Pour tous les autres de votre whereitem, vous pouvez utiliser et de.

Questions connexes