首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICriteria添加或限制

ICriteria添加或限制
EN

Stack Overflow用户
提问于 2013-02-15 18:23:29
回答 1查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
select * from produtos where Value = 10 or Value = 15 or  Value= 20 ....

因为我不知道​​会有多少值,所以它将在一个列表上循环,用户将决定​​将是多少值……问题是,如果我用标准

代码语言:javascript
复制
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“构成

代码语言:javascript
复制
select * from produtos where Value=10 and Value = 15 and  Value= 20 ....

不能使用限制" in“,因为我可以在Restrictions.Eq Restrictions.Ge或Restrictions.Le或任何其他子句中有位置...

在标准中添加子句还有什么方法吗?就像这样

代码语言:javascript
复制
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)));

我知道它使用了像link这样的表达式,但不明白这如何帮助我使用select,例如,假设我有一个foreach,并且对于每个项目,我需要在条件中添加一个"or“,

代码语言:javascript
复制
foreach (var item in items)
{
    criteria.Add("or item.Valor =" item.Valor);
}

我只能以此为标准:

代码语言:javascript
复制
foreach (var item in items)    
{
    criteria.Add(Restrictions.Eq("item.Valor", item.Valor));
}

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

我也希望在同样的情况下

代码语言:javascript
复制
foreach (var item in items)
{
    var items = session.QueryOver<Item>()
                       .WhereRestrictionOn(c => c.Valor item.Valor == | |?)
                       .List<Item>();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-15 20:31:15

也许你可以试试:

代码语言:javascript
复制
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});也应该可以工作

希望这能有所帮助

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14892611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档