2012-08-28 4 views
13

ich diese Abfrage simulieren möchten:QueryOver IN-Klausel?

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

Wie kann ich dies in FNH tun?

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

Aber das funktioniert nicht, gibt mir nur eine "unerkannte Methodenaufruf" Ausnahme.

Irgendwelche Ideen? Dies muss eine allgemeine Anfrage sein.

+0

möglich Duplikat von [NHibernate mit QueryOver mit WHERE IN] (http://StackOverflow.com/Questions/5408781/Nhibernate-User-Queryover-With-Where-In) –

Antwort

32

Aha - hab's! Die AddRestrictions hat eine isin Methode:

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

Mit diesem letzten Stück könnten wir bereit sein, unsere Jahre alten handgerollte ORM zu Graben!

+1

Einfach unglaublich einfach! Vielen Dank! –

+1

[Hier ist ein Gist] (https://gist.github.com/kenny-evitt/9121755) mit einem Beispiel für das dadurch generierte SQL. –

+0

'ids.ToArray()'? – ruffin

Verwandte Themen