我如何创建一个动态表达式,如(x,y)=> DateTime.Compare(y.EFFECTIVE_DATE,x.EFFECTIVE_DATE)
作者:互联网
我是较新的编码器,使用表达式树动态创建以下lamdba表达式时遇到很多问题.
( x, y ) => DateTime.Compare( y.EFFECTIVE_DATE, x.EFFECTIVE_DATE )
我才刚刚开始理解表达式树的基础知识,但似乎还不了解创建它的知识.我没有什么好代码要放在这里,因为说实话,我真的很糊涂.任何帮助都会很棒.
先感谢您.
抱歉,第一次发布,并且格式化项目存在一些问题.
因此,在我的主要方法中,我有以下几点:
var sortExpression = testing.GetExpression(“ EFFECTIVE_DATE”,“ EFFECTIVE_DATE”);
if (e.SortDirection == SortDirection.Ascending)
{
paymentAuthorizationList.Sort( sortExpression );
}
并且,在我的Get Expression Method中:
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 );
return expr;
}
我知道此时变量是错误的.排序表达式不适用于sort方法.
我只是想实现目标而已吗?
对不起,很抱歉,感谢您的帮助.
解决方法:
好了,您可以使用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);
标签:c,expression-trees 来源: https://codeday.me/bug/20191031/1973953.html