我遇到了我的linq查询问题。我正在尝试基于选定的值过滤对象。我们使用一个查询模型返回一个System.Linq.Expressions.Expression并用它来创建一个nhibernate查询。这是我的linq表达。Nhibernate/Linq:NHibernate.QueryException:无法解析属性:Profile.class:MyNamespace.MyObject
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(邮政属性):
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: 索引超出范围。必须为 非负值且小于 的大小。参数名称:索引
当我取出类型比较布尔表达式并只留在引用表达式中时,它仅适用于该一个选项时正常工作。
属性不会被模型以任何方式修改。它们是默认获取/设置的虚拟属性。
任何想法?