2

linq 内の orderby 関数で使用するために渡す動的ラムダ式を作成するにはどうすればよいですか?

私は基本的にを含む文字列になる場所で変換queryResults.OrderByDescending();したいと考えています。queryResults.OrderByDescending(myCustomGeneratedLambdaExp);myCustomGeneratedLambdaExpx => x.name

ありがとう

4

2 に答える 2

4

動的ラムダ式がどこで正確に必要だったかはわかりません。とにかく、ラムダ式を動的に生成する最良の方法は、式ツリーを使用することです。これは、このテーマに関する2つの優れたチュートリアルです。

このコードは、要求したようなラムダ式を生成します( "x => x.name"):

MemberInfo member = typeof(AClassWithANameProperty).GetProperty("Name");

//Create 'x' parameter expression
ParameterExpression xParameter = Expression.Parameter(typeof(object), "x");

//Create body expression
Expression body = Expression.MakeMemberAccess(targetParameter, member);

//Create and compile lambda
var lambda = Expression.Lambda<LateBoundGetMemberValue>(
    Expression.Convert(body, typeof(string)),
    targetParameter
);
return lambda.Compile();

お役に立てれば

于 2009-11-03T15:12:10.627 に答える
2

動的 LINQを参照してください

または、switch ステートメント、リフレクション、またはdynamicC# 4 の型を使用して、指定されたフィールド名に基づいて値を返すことができます。

これも以前に死ぬまで行われました

于 2009-11-03T14:52:51.110 に答える