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]));
}

ユーザーが 1 か国だけにいて、すべての国にいるかどうかを確認するため、機能しません...

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

HQL ではなく Criteria API に固執する場合は、次のものが必要だと思います。

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

Expressions クラスの新しいインスタンスを作成し、それをクエリ自体に追加する前に動的に設定できることを願っています。

于 2009-09-07T19:08:20.357 に答える