nHibernate中的动态QueryOver



与'Dynamic LINQ order '类似,我想创建一个动态QueryOver-OrderBy。但是,当我这样做时:

query.OrderBy(h => h.GetType().GetProperty(sort.Member).GetValue(h, null)).Asc
我得到一个异常,它说:
Unrecognised method call in epression h.GetType().GetProperty(value(Domain.Model.Repository+<>c__DisplayClass15).sort.Member).GetValue(h, null)

显然,nHibernate在理解正在发生的事情时遇到了一些麻烦。有人知道如何解决这个问题吗?

链接问题中的解决方案不起作用,因为当多个实体连接并且应该对来自不同实体的属性组合进行排序时仍然存在问题。我能想到的唯一可行的解决方案是创建一个从sort.MemberProjection.Property的字典。

var dict = new Dictionary<string, string>();
dict.Add("sortMember", "entityAlias.Property");
var sortOn = dict[sort.Member];
query.OrderBy(Projections.Property(sortOn)).Asc;

这工作得很好。字典基本上取代了整个if-else结构,一个简单的循环添加了顺序。我想我可以用类似的方式修改过滤部分,但是还没有时间修改那部分。

Dynamic QueryOver没有多大意义。

QueryOver本身是强类型条件。使用Criteria代替QueryOver

您应该使用在"Dynamic Linq order "链接中提供的方法。你代码中的问题是NHibernate不能解析那个表达式。

还有,我真的不明白你为什么要按属性里面的值排序,而不是按属性本身排序。

假设您尝试按属性名称排序,您需要做的就是:

1 -在链接

中为扩展方法添加"using"

2 -像这样使用:

query.OrderBy(sort.Member);

还没有试过,但应该可以。

相关内容

  • 没有找到相关文章