2013-02-15 3 views
1

мне нужно сделать выбор следующего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 * from produtos where Value=10 and Value = 15 and Value= 20 .... 

не может использовать ограничение «in», потому что я могу иметь место в Restrictions.Eq Restrictions.Ge или Restrictions.Le или любом другом разделе ...

Есть какой-то способ просто добавить предложения в критерии? что-то вроде

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 (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

ли есть причина, почему не используется API QueryOver? :) –

+0

извините, не знаю этого ... Можете ли вы привести мне пример того, как код будет в C#, если возможно – Maicon

+0

О, [здесь целая статья] (http://nhforge.org/blogs/nhibernate/ архив/2009/12/17/queryover-in-nh-3-0.aspx) по теме, наслаждайтесь :) NHibernate также имеет отдельный LINQ-провайдер, который вы также можете проверить, хотите ли вы ... –

ответ

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}); должен также работать

Надеются, что это поможет

+0

да эта работа ... disjuntion for "or" union for "и" ... спасибо !! – Maicon

Смежные вопросы