2010-10-11 13 views
0

J'cris une interface générale de DAO et face à un difficile fonctionnement général de la requête. L'opération de requête requiert un ensemble de conditions de requête. Je voudrais donner une interface commeY at-il la classe .net pour les conditions de requête comme DetachedCriteria dans Hibernate, mais pas compter sur Hibernate?

IList<TEntity> Query(DetachedCriteria criteria); 

Mais cela fait que l'interface dépend de nHibernate. Si je veux utiliser Linq ou SQL simplifié, il n'est pas facile de convertir les éléments détachés.

Je veux avoir une classe qui peut envelopper les conditions de requête comme DetachedCriteria dans nHibernate, mais peut être convertie en DetachedCriteria, ou linq, ou SQL pur.

J'ai écrit une fois une classe en Java qui enveloppe les conditions de requête et peut être converti en SQL ordinaire. Je veux savoir si il existe un projet existant dans le net qui peut faire un travail similaire.

Répondre

0

Que diriez-vous

Expression<Predicate<TEntity>> 

Vous pouvez ensuite analyser l'arbre d'expression et la transformer en SQL. Pour linq vous pouvez même simplement le transformer en clause where avec le même prédicat.

http://blogs.msdn.com/b/mattwar/archive/2008/11/18/linq-links.aspx décrit la construction d'un fournisseur Linq complet, mais vous avez probablement besoin que l'équivalent d'une clause where.

+0

Merci beaucoup de m'avoir fourni un bon métrage. Je vais envoyer un fournisseur ICriteria. – rudaoshi

0

Vous pouvez utiliser IQueryable et construire l'arbre d'expression (la façon dont .NET Framework utilise pour générer une requête générale) ou vous pouvez implémenter votre propre Specification pattern.

+0

Merci pour votre suggestion! – rudaoshi