我需要进行如下选择
select * from produtos where Value = 10 or Value = 15 or Value= 20 ....
由于我不知道会有多少值,它将在列表中循环,用户将决定有多少值......问题是,如果我执行 Criteria
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));
由一个选择子句“and”组成
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>();
}