有条件地创建标准nhibernate

时间:2009-09-07 18:59:41

标签: asp.net nhibernate criteria

假设我有一个用户表和国家/地区表,例如:

tblUsers
int UserId
int UserCountry

tblCountries
int CountryId
string CountryName

并为每个人准备好适当的映射。

如果我有类似List EligibleCountries的内容,如何创建查询以从国家/地区列表中检索所有用户?

类似的东西:

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

不会工作,因为只有一个国家/地区的用户会检查他们是否在所有国家/地区......

我尝试过使用Restrictions.In,但似乎没有按我想要的方式工作。

我该怎么做才能检索用户,只要他们在符合条件的国家/地区列表中的某个国家/地区?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

如果您想坚持使用Criteria API而不是HQL,我认为您需要以下内容:

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

希望您可以创建一个Expressions类的新实例,并在将其添加到查询本身之前动态填充它。