21

FNHを使用して、次を使用してカテゴリを取得しようとしています:

_session.QueryOver<Data.Model.Category>()
                                     .Where(c => tourCreateRequest.Categories.Contains(c.CategoryId))
                                     .List()
                                     .Select(_categoryMapper.CreateCategory)
                                     .ToList();

しかし、.Contains()メソッドでエラーが発生します。

認識されないメソッド呼び出し: System.Collections.Generic.ICollection`1[[System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]:Boolean Contains(Int64)

なぜそのエラーが発生するのですか?何が問題なのですか?

いくつかの投稿を行った後、クエリを (以下) に変更しました。これは Query<> で機能します。

_session.Query<Data.Model.Category>()
                                     .Where(c => tourCreateRequest.Categories.Contains(c.CategoryId))
                                     .ToList()
                                     .Select(_categoryMapper.CreateCategory)
                                     .ToList();

QueryOver<> は最新かつ最高であり、Query<> の代わりに使用する必要があると思いました。

上記のように QueryOver<> を使用する方法の問題は何ですか?

4

3 に答える 3

32

私は答えを見つけました。次の投稿に感謝します: NHibernate using QueryOver with WHERE IN

var categories = _session.QueryOver<Data.Model.Category>()
                                     .WhereRestrictionOn(c => c.CategoryId).IsIn(ArrayofCategoryIds)
                                     .List()
                                     .Select(_categoryMapper.CreateCategory)
                                     .ToList();

WhereRestrictionOn() を使用する必要がありました

于 2013-04-07T13:58:18.300 に答える