2009-09-07 6 views
0

Dire que j'ai une table d'utilisateurs et une table pays, quelque chose comme:sous condition de créer des critères NHibernate

tblUsers 
int UserId 
int UserCountry 

tblCountries 
int CountryId 
string CountryName 

et ont les correspondances etc organisées de façon appropriée pour chacun.

Comment créer une requête pour récupérer tous les utilisateurs d'une liste de pays, si j'avais quelque chose comme List EligibleCountries?

Quelque chose comme:

DetachedCriteria query = DetachedCriteria.For<Users>(); 
for(int i = 0; i < EligibleCountries.Count(); i++) 
{ 
    query.CreateAlias("Country", "c") 
     .Add(Restrictions.Like("c.CountryId", EligibleCountries[i])); 
} 

wont work car un utilisateur dans un seul pays et qui seraient de vérifier s'ils sont dans tous les pays ...

J'essayé d'utiliser Restrictions.In mais cela ne semblait pas fonctionner comme je le voulais.

Comment puis-je faire pour récupérer les utilisateurs aussi longtemps qu'ils se trouvent dans l'un des pays de la liste des pays éligibles?

Répondre

1
// Or expression 
var countryCondition = Expression.Disjunction(); 

foreach(int countryId in EligibleCountries) 
{ 
    countryCondition.Add(Restrictions.Like("c.CountryId", countryId)); 
} 

DetachedCriteria query = DetachedCriteria.For<Users>() 
    .CreateCriteria("Country", "c") 
    .Add(countryCondition); 
+0

belle, ça ressemble. Merci. – Adam

0

Je pense que vous avez besoin de ce qui suit si vous voulez coller avec l'API de critères, par opposition à HQL:

.Add(Expressions.Or(Expressions.Like(... 

Si tout va bien, vous pouvez créer une nouvelle instance d'une classe d'expressions et remplir dynamiquement avant d'ajouter à la requête elle-même.

Questions connexes