ラッパーを使用してテーブル User からデータを取得しています
IQueryable<StarGuestWrapper> WhereQuery =
session.Linq<User>().Where(u => u.HomeClub.Id == clubId && u.IsActive).Select(
u =>
new StarGuestWrapper()
{
FullName = u.Name + " " + u.LastName,
LoginTime = u.SomeDateTime,
MonthsAsMember = u.SomeIntergerValue,
StarRating = u.SomeOtherInteregValue,
UserPicture = u.Photo.PhotoData,
InstructorFullName = u.SomeInstructorName,
TalkInteractionDuringSession = u.SomeBoolValue,
GoalInteractionDuringSession = u.SomeOtherBoolValue
});
これを問題なく IQueryable として使用しているため、実際にクエリを実行する前に便利なことを行うことができます。お気に入り :
WhereQuery.Skip(startRowIndex).Take(maximumRows).ToList();
等々。
この問題は、クエリで「where」ステートメントを使用すると発生します。例えば:
WhereQuery.Where(s => s.StarRating == 1)
「StarRating」がユーザーテーブルに存在しないという例外が実行時にスローされます-もちろん、それはラッパープロパティではありません。クエリを具体化すると機能します
WhereQuery.AsEnumerable().Where(s => s.StarRating == 1)
しかし、それは IQueryable を使用する感覚をすべて失い、私はこれをしたくありません。
奇妙で興味深いのは、ラッパーのすべてのプロパティがエラーをスローするわけではなく、すべてのブール値が where ステートメントで使用できることです。例 :
WhereQuery.Where(s => s.TalkInteractionDuringSession)
EntityFramework で動作しますが、NHibernate でこのエラーが発生するのはなぜですか?また、希望どおりに動作させる方法を教えてください。