ICriteria添加或限制

时间:2013-02-15 10:23:29

标签: c# nhibernate nhibernate-criteria

我需要按如下方式进行选择

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

由于我不知道将会有多少值,它将在列表中循环,用户将决定将有多少值...问题是如果我做标准< / p>

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子句“和”

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

1 个答案:

答案 0 :(得分: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});也应该有用

希望这会有所帮助