2012-08-28 19 views
13

私はこのクエリをシミュレートする:QueryOver IN句?

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

私はFNHでこれをどのように行うことができますか?

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

しかし、それは動作しません、私に "認識されないメソッド呼び出し"例外を与えます。

アイデア?これは一般的な要求でなければなりません。

+0

[NHibernateとWHERE INを使用したNHibernateの可能な複製](http://stackoverflow.com/questions/5408781/nhibernate-using-queryover-with-where-in) –

答えて

32

Aha- got it!我々は歳手巻きのORMを捨てる準備ができているかもしれません。この最後のピースで

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

:AddRestrictionsはISINメソッドを持っています!

+1

ちょうど驚くほど簡単です!ありがとう! –

+1

これで生成されたSQLの例を示した[ここにはGist](https://gist.github.com/kenny-evitt/9121755)があります。 –

+0

'ids.ToArray()'? – ruffin