私は自分で1つの方法を見つけることができましたが、それはより回避策のように見えます。Marcのバージョンははるかに単純です。テストしたらすぐにマークの答えを受け入れます。これが私の回避策です:
public class MemberModifier : ExpressionVisitor
{
public Expression Modify(Expression expression)
{
return Visit(expression);
}
protected override Expression VisitMember(MemberExpression node)
{
var t = typeof (DepartmentPaperConsumption);
var memberInfo = t.GetMember("TotalPages")[0];
return Expression.MakeMemberAccess(node.Expression, memberInfo);
}
}
そしてコードで
Expression<Func<object>> exp = () => dto.TotalColorPrints;
var mod = new MemberModifier();
var modEx = mod.Modify(exp);
result.OrderByAlias((Expression<Func<object>>)modEx)
MemberModifierは生のプロトタイプにすぎません。より一般的で、DepartmentConsumptionに依存せず、ハードコードされた「TotalPages」がない必要があります。