的ICriteria添加或限制

问题描述:

我需要做一个选择如下的ICriteria添加或限制

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

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

是有没有理由不使用'QueryOver' API? :) – 2013-02-15 10:27:09

+0

对不起,不知道这个......你能给我一个例子,说明如何在C#中使用代码 – Maicon 2013-02-15 10:35:09

+0

哦,[这里是整篇文章](http://nhforge.org/blogs/nhibernate/ archive/2009/12/17/queryover-in-nh-3-0.aspx)在这个问题上,享受:) NHibernate也有一个单独的LINQ内置提供程序,你也可以检查出你是否想要... – 2013-02-15 10:36:21

也许你可以试试:

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});也应努力

希望这将有助于

+0

是的这项工作...... disjuntion for“或”连词for“和”...谢谢!! – Maicon 2013-02-15 18:56:12