2010-04-27 2 views
2

Je crée une méthode qui peut créer un filtre compris par NHibernate (par filtre, je veux dire un ensemble d'objet ICriteria par exemple) de mon objet filtre abstrait.Est-il possible de créer ICriteria/ICriterion à partir de LINQ ou HQL?

public static IEnumerable<ICriterion> ToNhCriteria(this MyCriteria criteria) 
{ 
    // T4 generated function 
    // lots of result.Add(Expression.Or(Expression.Eq(),Expression.Eq)) expression trees - hard to generate 
    // Is there a way to generate HQL/Linq query here istead? 
} 

alors je veux faire quelque chose comme

session.CreateCriteria<Entity>().Add(myCriteria.ToNhCriteria()) 

pour filtrer les entités. Le problème est que l'utilisation d'expression. méthodes (Expression.Or etc) est assez fastidieux (la méthode est générée et j'ai plusieurs ou des instructions qui doivent être jointes dans une expression en quelque sorte). Existe-t-il un moyen d'éviter d'utiliser Expression.Or() et de créer ICrietrion/ICriteria en utilisant LINQ ou HQL?

+2

Utilisez-vous T4 au moment de la conception ou de l'exécution pour générer ICriteria? Si au moment de la conception, qu'est-ce qui vous empêche d'utiliser T4 pour générer HQL (ou Linq) à la place? –

+0

Oui, j'utilise T4 en temps de conception et comme vous avez suggéré je pourrais utiliser HQL ou Linq au lieu de ICriteria. Le problème a été causé par mon manque de connaissances plutôt que par des limitations du cadre. Actuellement, j'utilise ICriteria API, car il semble être plus lisible pour quelqu'un qui lit T4 et cela fonctionne correctement maintenant. – adrin

Répondre

0

Non, ce n'est pas possible. Pourquoi n'utilisez-vous pas linq au lieu de critères?

0

Linq n'est pas la meilleure solution à moins que vous ne souhaitiez filtrer du côté de la collection et non du côté de la base de données en utilisant les clauses WHERE. Ayende suggère que l'API ICriteria est bien adaptée pour la création de filtres dynamiques, le problème que j'avais avec plusieurs ORs a été résolu en utilisant Restrictions.Disjunction() ... qui a beaucoup simplifié Au moment où j'ai posé la question je n'ai pas fait t réaliser de telles choses existent dans NHibernate :)

1

Hey, avez-vous vérifié this question? Il montre aller de Linq à NHibernate à un MultiCriteria (et transforme en chemin une requête linq en ICriteria)

Questions connexes