У меня проблема с моим запросом 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: для индекса не былоспектр.Должен быть неотрицательным и меньшим, чем размер коллекции.Имя параметра: index
Когда я убираю логические выражения сравнения типов и оставляю их только в выражении Referrals, он отлично работает для фильтрации только по этой опции.
Свойстваникак не модифицируется моделью.Это виртуальные свойства со значением по умолчанию get / set.
Есть идеи?