Mysql 使用Nihibernate和系统动态linq进行查询<;T>;

Mysql 使用Nihibernate和系统动态linq进行查询<;T>;,mysql,nhibernate,dynamic-linq,Mysql,Nhibernate,Dynamic Linq,我正在尝试使用system.dynamic.linq创建动态排序 这是我使用的查询: var query = dalSession.Query<T>().AsQueryable(); var res = (from x in query orderby "x.FirstName" select x) 因此,您可以看到mysql查询的输出是直接字符串,而不是它的反射('x.FirstName')或('FirstName')。 这在mysql上下文中没有意义,看起来我需要order b

我正在尝试使用system.dynamic.linq创建动态排序

这是我使用的查询:

var query = dalSession.Query<T>().AsQueryable();
var res = (from x in query orderby "x.FirstName" select x)
因此,您可以看到mysql查询的输出是直接字符串,而不是它的反射(
'x.FirstName'
)或(
'FirstName'
)。
这在mysql上下文中没有意义,看起来我需要order by
affiliate0\uu.first\u name

是否有任何方式为成员本身提供Nhibernate?因此,编译后的查询将正常进行?

您必须删除“from You requirey.”x.FirstName“被视为字符串并转换为sql字符串。

在动态字符串中,“x”没有任何意义

删除
x.
(即只留下“FirstName”),它应该可以工作

使用方法调用而不是查询理解语法,您将得到:

var res = query.Orderby("FirstName")
你有没有按照迭戈的建议试过?
(从查询中的x选择x)。订购者(“名字”)

因为我认为当您使用
(x=>“FirstName”)

否则,请尝试以下操作:
(从查询中的x选择x).OrderBy(“it.FirstName”)

顺便说一句,我将Dynamic.cs中的OrderBy方法重命名为dynamiccorderby,因为在某些情况下,也会执行非动态linq OrderBy方法:

public static IQueryable dynamicCorderby(此IQueryable源、字符串顺序、参数对象[]值)
并改用该源:

(从查询中的x选择x)。dynamiccorderby(“FirstName”)

var param=Expression.Parameter(“x”);
var prop=Expression.Property(参数“FirstName”);
var lambda=表达式.lambda(prop,param);
query.Orderby(lambda);

但这就是问题所在,我有名字(成员名)作为字符串。我想进行动态排序。你必须为每个要排序的成员进行切换,以便提供正确的动态查询。你可以使用queryover API进行此查询。谢谢。但是如果看我的帖子,你会发现我已经尝试了
FirstName
而没有
x
。我刚刚做了:
(从查询中的x选择x).OrderBy(x=>“FirstName”)
我在mysql查询中得到了相同的结果。Thanks@SexyMF您是否看到他的代码中没有
x=>
?您总是指定按常量字符串排序,并且没有使用此名称的属性。按原样复制Diegos代码
var res = query.Orderby("FirstName")
var param = Expression.Parameter("x");
var prop = Expression.Property(param, "FirstName");
var lambda = Expression.Lambda<Func<User, string>>(prop, param);
query.Orderby(lambda);