1

我需要进行如下选择

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

由于我不知道会有多少值,它将在列表中循环,用户将决定有多少值......问题是,如果我执行 Criteria

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

由一个选择子句“and”组成

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

不能使用“in”限制,因为我可以在 Restrictions.Eq Restrictions.Ge 或 Restrictions.Le 或任何其他子句中占有一席之地......

有什么方法可以在 Criteria 中添加子句?就像是

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 并且对于每个项目我需要让这个 foreach 添加一个“或”标准,

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

什么是“和”或它。但这不会或可能会为此添加另一个标准。

在同样的情况下,我会想要那个

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 回答