0

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

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 但这似乎没有按我想要的方式工作。

我该怎么做才能检索用户,只要他们位于合格国家列表中的国家之一?

4

2 回答 2

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);
于 2009-09-07T19:11:45.093 回答
0

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

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

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

于 2009-09-07T19:08:20.357 回答