我的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);
映射(我们使用的是fluent)如下所示:
MyObject(后期属性):
References(x => x.Post, "PostId");
References(x => x.Profile, "ProfileId");
当我改变的时候
x.Post.Profile is SomeType
到
x.Post.Profile.GetType() == typeof(SomeType)
它抛出一个不同的错误,即
System.ArgumentOutOfRangeException :
索引超出范围。必须是
非负且小于
当我取出类型比较布尔表达式并只保留Referrals表达式时,只对这一个选项进行过滤就可以了。
模型不会以任何方式修改属性。它们是具有默认get/set的虚拟属性。