1

system.dynamic.linq を使用して動的ソートを作成しようとしています。

これは、私が使用するクエリです:

var query = dalSession.Query<T>().AsQueryable();
var res = (from x in query orderby "x.FirstName" select x)

これはmysqlの出力です:

select
     affiliate0_.id as id0_,
     affiliate0_.first_name as first6_0_,
from affiliate affiliate0_ order by 'x.FirstName' //FirstName as well

'x.FirstName'したがって、mysql クエリへの出力は直接の文字列であり、そのリフレクション ( ) または ( )ではないことがわかります'FirstName'
これは mysql のコンテキストでは意味がありません。 order by が必要なようですaffiliate0_.first_name
Nhibernateにメンバー自体を提供する方法はありますか? コンパイルされたクエリは正常に実行されますか?

4

4 に答える 4

0

「x」は、動的文字列内では意味がありません。

を削除するとx.(つまり、"FirstName" だけを残します)、動作するはずです。

クエリ内包構文の代わりにメソッド呼び出しを使用すると、次のようになります。

var res = query.Orderby("FirstName")
于 2012-11-07T17:41:08.717 に答える
0
var param = Expression.Parameter("x");
var prop = Expression.Property(param, "FirstName");
var lambda = Expression.Lambda<Func<User, string>>(prop, param);
query.Orderby(lambda);
于 2013-03-13T09:28:51.217 に答える
0

次のように試しましたか(ディエゴが提案したように)? (from x in query select x).OrderBy("FirstName")

使用すると動的linq orderby拡張メソッドが実行されないと思うので(x => "FirstName")

そうでなければこれを試してください: (from x in query select x).OrderBy("it.FirstName")

ところで、動的ではないlinq OrderByメソッドも実行される状況があったため、Dynamic.csのOrderByメソッドの名前をDynamicOrderByに変更しました。

public static IQueryable<T> DynamicOrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)代わりにそれを使用します:

(from x in query select x).DynamicOrderBy("FirstName")

于 2012-11-08T06:47:44.110 に答える
0

" を削除する必要があります。"x.FirstName" は文字列と見なされ、SQL 文字列に変換されます。

于 2012-11-07T08:46:45.117 に答える