2012-08-28 10 views
13

Voglio simulare questa query:QueryOver IN Clausola?

SELECT * FROM FOO WHERE ID IN (1,2,3) 

Come posso fare questo in FNH?

var ids = new List<int>{1,2,3}; 
var results = session.QueryOver<Foo>().Where(x=> ids.Contains(x.id)); 

Ma questo non funziona, mi dà solo un'eccezione "chiamata di metodo non riconosciuta".

Qualche idea? Questa deve essere una richiesta comune.

+0

possibile duplicato di [NHibernate utilizzando QueryOver con WHERE IN] (http://stackoverflow.com/questions/5408781/nhibernate-using-queryover-with-where-in) –

risposta

32

Aha- capito! I AddRestrictions ha un metodo ISIN:

var results = session.QueryOver<Foo>().AndRestrictionOn(x=>x.id).IsIn(ids) 

Con questo ultimo pezzo potremmo essere pronto ad abbandonare il nostro anno-vecchio ORM arrotolato a mano!

+1

Semplicemente sorprendentemente semplice! Grazie! –

+1

[Here's a Gist] (https://gist.github.com/kenny-evitt/9121755) con un esempio di SQL generato da questo. –

+0

'ids.ToArray()'? – ruffin