的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>();
}
答
也许你可以试试:
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
是有没有理由不使用'QueryOver' API? :) – 2013-02-15 10:27:09
对不起,不知道这个......你能给我一个例子,说明如何在C#中使用代码 – Maicon 2013-02-15 10:35:09
哦,[这里是整篇文章](http://nhforge.org/blogs/nhibernate/ archive/2009/12/17/queryover-in-nh-3-0.aspx)在这个问题上,享受:) NHibernate也有一个单独的LINQ内置提供程序,你也可以检查出你是否想要... – 2013-02-15 10:36:21