Nhibernate / Linq: NHibernate.QueryException: не удалось разрешить свойство: Profile.class of: MyNamespace.MyObject
У меня проблема с моим запросом linq. Я пытаюсь фильтровать объекты на основе выбранных значений. Мы используем модель запроса, которая возвращает выражение System.Linq.Expressions.Expression и использует его для создания запроса nhibernate. Вот мое выражение linq.
x =>(request.InitialLoad
|| (!request.InitialLoad
&& (Enum.GetValues(typeof(MyType)).Length == request.MyTypes.Length
||
(Enum.GetValues(typeof(MyType)).Length != request.MyTypes.Length
&&
((request.MyTypes.Contains((int)MyType.Referrals)
&& x.Post.PostType == StatusPostType.Referral)
||
(request.MyTypes.Contains((int)MyType.Businesses)
&& x.Post.Profile is BusinessProfile)
||
(request.MyTypes.Contains((int)MyType.Members)
&& x.Post.Profile is UserProfile)
)
)
)
)
)
&& x.Profile.Equals(request.Profile);
Отображения (мы используем бегло) выглядят так:
MyObject (свойство Post):
References(x => x.Post, "PostId");
MyObject.Post (Свойство профиля):
References(x => x.Profile, "ProfileId");
Когда я меняюx.Post.Profile is SomeType
вx.Post.Profile.GetType() == typeof(SomeType)
он выдает другую ошибку, которая
System.ArgumentOutOfRangeException: индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс
Когда я убираю логические выражения сравнения типов и оставляю их только в выражении Referrals, он отлично работает для фильтрации только по одному варианту.
Свойства никак не изменяются моделью. Это виртуальные свойства со значением get / set по умолчанию.
Есть идеи?