1

次のように選択する必要があります

select * from produtos where Value = 10 or Value = 15 or  Value= 20 ....

いくつの値が来るかわからないので、ユーザーがいくつの値になるかを決定するリストのループになります...問題は、私が基準を実行すると

ICriteria criterion = session.createCriteria(typeof (Product) "produto"). SetCacheable (true);
criterio.Add (Restrictions.Eq ("produto.Valor", 10));
criterio.Add (Restrictions.Eq ("produto.Valor", 15));
criterio.Add (Restrictions.Eq ("produto.Valor", 20));

select句「and」で作られています

select * from produtos where Value=10 and Value = 15 and  Value= 20 ....

私はRestrictions.Eq Restrictions.GeまたはRestrictions.Leまたはその他の句に配置できるため、「in」で制限を使用することはできません...

基準に句を追加するだけの方法はありますか? 何かのようなもの

criteria.Add (Restrictions.Or (Restrictions.Eq ("produto.Valor", 10)));
criteria.Add (Restrictions.Or (Restrictions.Eq ("produto.Valor", 15)));
criteria.Add (Restrictions.Or (Restrictions.Eq ("produto.Valor", 20)));
criteria.Add (Restrictions.Or (Restrictions.Eq ("produto.Valor", 25)));

リンクのようなある種の表現を使用していることは理解していますが、これが選択に乗るのにどのように役立つかを理解していませんでした。基準、

foreach (var item in items)
{
    criteria.Add("or item.Valor =" item.Valor);
}

私はこれで基準しかできません:

foreach (var item in items)    
{
    criteria.Add(Restrictions.Eq("item.Valor", item.Valor));
}

「and」またはそれは何でしょう。しかし、それはそれに別の基準を追加しないか、追加する可能性があります.

私は同じ状況でそれを望んでいたでしょう

foreach (var item in items)
{
    var items = session.QueryOver<Item>()
                       .WhereRestrictionOn(c => c.Valor item.Valor == | |?)
                       .List<Item>();
}
4

1 に答える 1

3

多分あなたは試すことができます:

criteria.Add (
    new Disjunction()
        .Add (Restrictions.Eq ("produto.Valor", 10))
        .Add (Restrictions.Eq ("produto.Valor", 15))
        .Add (Restrictions.Eq ("produto.Valor", 20))
        .Add (Restrictions.Eq ("produto.Valor", 25))
    );

criteria.Add (Restrictions.In("produto.Valor", new[]{10,15,20,25});もうまくいくはずだと思います

これがお役に立てば幸いです

于 2013-02-15T12:31:15.160 に答える