当前位置: 首页 > 编程语言 > C#

Nhibernate-Linq-NHibernate.QueryException-Unabletoresolveproperty-Profile.class-MyNamespace.MyObject分享

时间:2023-04-10 19:13:48 C#

Nhibernate/Linq:NHibernate.QueryException:无法解析属性:Profile.class:MyNamespace.MyObject我的linq查询有问题。我正在尝试根据选定的值过滤对象。我们使用返回System.Linq.Expressions.Expression的查询模型,并使用它来创建nhibernate查询。这是我的linq表达式。x=>(request.InitialLoad||(!request.InitialLoad&&(Enum.GetValues(typeof(MyType)).L??ength==request.MyTypes.Length||(Enum.GetValues(typeof(MyType)).L??ength!=request.MyTypes.Length&&((request.MyTypes.Contains((int)MyType.Referrals)&&x.Post.PostType==StatusPostType.Referral)||(request.MyTypes.Contains((int)MyType.Business)&&x.Post.Profile是BusinessProfile)||(request.MyTypes.Contains((int)MyType.Members)&&x.Post.Profile是UserProfile))))&&x.Profile.Equals(request.Profile);映射(我们使用流利的)看起来像这样:MyObject(Postproperty):References(x=>x.Post,"PostId");MyObject.Post(Profileproperty):References(x=>x.Profile,"ProfileId");当我将x.Post.ProfileisSomeType更改为x.Post.Profile.GetType()==typeof(SomeType)时,它会抛出一个不同的错误,即System.ArgumentOutOfRangeException:Indexoutofrange.Mustbenon-negativeand小于集合的大小参数名称:index当我取出类型比较布尔表达式并只留在引用表达式中时,它只适用于过滤那个选项。该模型不会以任何方式修改属性。它们是默认获取/设置的虚拟属性。有任何想法吗?我很确定NHibernate.Linq不支持直接过滤类类型。如果您需要区分类型,我会在基类(可能是枚举)上使用属性值,该属性值在子类中设置为正确的值。然后您可以像这样执行比较:x.Post.Profile.Type=ProfileTypes.BusinessProfile只需在子类的构造函数中静态设置此属性,将其映射到NHibernate,并为属性映射设置update=false。虽然有点不雅,但这应该会给你想要的结果。以上就是C#学习教程:Nhibernate/Linq:NHibernate.QueryException:Unabletoparsetheproperty:Profile.class:MyNamespace.MyObject分享的所有内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: