如何创建一个动态表达式(x, y) =>DateTime.比较(y.p eve_date, x.p eve_date)

本文关键字:eve date 比较 DateTime 表达式 创建 何创建 动态 一个 | 更新日期: 2023-09-27 18:01:18

我是一个较新的编码员,我有很多问题创建以下lamdba表达式动态使用表达式树。

( x, y ) => DateTime.Compare( y.EFFECTIVE_DATE, x.EFFECTIVE_DATE )

我刚刚开始了解表达式树的基础知识,但似乎不知道如何创建它。我没有任何好的代码可以放在这里,因为老实说,我真的很笨手笨脚。如果有任何帮助就太好了。

提前谢谢你。

很抱歉,第一次发帖时遇到一些格式问题。

那么,在我的main方法中,我有以下内容:

var sortExpression = testing。GetExpression(" effective - _date ", " effective - _date ");

        if (e.SortDirection == SortDirection.Ascending)
        {
            paymentAuthorizationList.Sort( sortExpression );  
        }

和,在我的Get表达式方法:

    public Expression<Func<AuthorizePayments, AuthorizePayments, int >> GetExpression<t>( string propertyName, string propertyValue )
    {
        var paramX = Expression.Parameter( typeof( AuthorizePayments ), "x" ); // x
        var paramY = Expression.Parameter( typeof( AuthorizePayments ), "y" ); // y
        var xDate = Expression.Property( paramX, "EFFECTIVE_DATE" ); // x.EFFECTIVE_DATE
        var yDate = Expression.Property( paramY, "EFFECTIVE_DATE" ); // y.EFFECTIVE_DATE
        // DateTime.Compare(y.EFFECTIVE_DATE, x.EFFECTIVE_DATE)
        var body = Expression.Call( typeof( DateTime ).GetMethod( "DateTime.Compare" ), yDate, xDate );
        // (x, y) => DateTime.Compare(y.EFFECTIVE_DATE, x.EFFECTIVE_DATE)
        var expr = Expression.Lambda<Func<AuthorizePayments, AuthorizePayments, int >>( body, paramX, paramY );

返回expr;}

我知道这个时候变量是错的。排序表达式不适用于排序方法。

我是不是偏离了我想要做的事情?

对不起我的无知,谢谢你的帮助。

如何创建一个动态表达式(x, y) =>DateTime.比较(y.p eve_date, x.p eve_date)

你可以在编译器的帮助下使用lambda表达式"静态地"创建它:

Expression<Func<Foo, Foo, int>> expr =
            (x, y) => DateTime.Compare(y.EFFECTIVE_DATE, x.EFFECTIVE_DATE);

如果你想手工完成:

var paramX = Expression.Parameter(typeof(Foo), "x"); // x
var paramY = Expression.Parameter(typeof(Foo), "y"); // y
var xDate = Expression.Property(paramX, "EFFECTIVE_DATE"); // x.EFFECTIVE_DATE
var yDate = Expression.Property(paramY, "EFFECTIVE_DATE"); // y.EFFECTIVE_DATE
// DateTime.Compare(y.EFFECTIVE_DATE, x.EFFECTIVE_DATE)
var body = Expression.Call(typeof(DateTime).GetMethod("Compare"), yDate, xDate);
// (x, y) => DateTime.Compare(y.EFFECTIVE_DATE, x.EFFECTIVE_DATE)
var expr = Expression.Lambda<Func<Foo, Foo, int>>(body, paramX, paramY);