我需要按如下方式进行选择
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>();
}
答案 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});
也应该有用
希望这会有所帮助