2010-10-01 5 views
1

Est-il possible d'appliquer une clause WHERE à une requête SubSonic?Subsonic Single Clause WHERE

Par exemple, je reçois obtenir un basé sur id ...

db.Single<Storage>(id); 

Mais comment puis-je obtenir un seul basé sur un simple clause WHERE?

db.Single<Storage>(WHERE columnname == "value"); 

Répondre

1

Merci pour ce qui précède, ce fut une aide et finalement je simplifier cela au-dessous ...

 db.Single<Storage>(s => s.ColumnName == "value"); 
+0

Oui, n'a pas pensé à ça;) Toujours à l'aide SubSonic 2 parce que je suis restreint au cadre 2.0. Au plaisir de mirgrate dans un proche avenir. –

+0

@SchlaWiener: Hors sujet, mais puisque vous le mentionnez, je dirai que je n'ai pas été trop heureux avec SubSonic 3. Bien sûr, la syntaxe LINQ est agréable, mais elle est buggée, et quand le fournisseur LINQ ne frappe pas bug, c'est simplement limité. Sans compter qu'il y a juste assez de changements de rupture dans le code basé sur le modèle pour être un tracas. J'espère que vous pourrez bientôt évoluer dans le framework, mais ne soyez pas trop excité pour SS3, lol. –

+0

Comme j'utilise mysql qui n'est probablement pas aussi testé que le serveur sql, je m'attends à trouver quelques bugs. Mais comme il est open source, je peux le réparer moi-même;) La fonction de tueur pour moi est subsonique en conjonction avec le mode serveur XtraGrid et source de données linq http://tv.devexpress.com/#XtraGridLinqServerMode J'ai une application de démonstration en cours d'exécution et c'est génial . Je peux faire une recherche/tri et groupement incrémental sur une table avec plus de 200000 enregistrements et c'est sacrément rapide. –

1

qui est possible:

// Will return a Storage instance with property IsNew = true, if record does not exist 
// since an object created with new never can be null 
var storage1 = new Storage(1); // id = 1 
var storage1 = new Storage(Storag.Columns.ColumnName, "value"); 

// Will return 0 if record not found (subsonic3 only) 
var storage3 = (from s in Storage 
       where s.ColumnName == "value" 
       select s).SingleOrDefault(); 

// Will throw an exception if record not found (subsonic3 only) 
var storage3 = (from s in Storage 
       where s.ColumnName == "value" 
       select s).Single(); 

Comme db est une classe partielle, vous pouvez l'étendre. Créez simplement un nouveau fichier dans le même espace de noms (mais un autre dossier dans votre solution). Cela s'applique à subsonic 2 mais sera similaire à subsonic 3, je pense.

public static partial class DB 
{ 
    public static T Single<T>(String columName, Object columnValue) where T: RecordBase<T>, new() 
    { 
     return Select().From<T>() 
         .Where(columnName).IsEqualTo(columnValue) 
         .ExecuteSingle<T>(); 
    } 
}