62,041
社区成员
发帖
与我相关
我的任务
分享
// Add the following using directive to your code file:
// using System.Linq.Expressions;
// Create an expression tree.
Expression<Func<int, bool>> exprTree = num => num < 5;
// Decompose the expression tree.
ParameterExpression param = (ParameterExpression)exprTree.Parameters[0];
BinaryExpression operation = (BinaryExpression)exprTree.Body;
ParameterExpression left = (ParameterExpression)operation.Left;
ConstantExpression right = (ConstantExpression)operation.Right;
Console.WriteLine("Decomposed expression: {0} => {1} {2} {3}",
param.Name, left.Name, operation.NodeType, right.Value);
// This code produces the following output:
// Decomposed expression: num => num LessThan 5
public class Test
{
public void ExpressionTest()
{
T t=new T(){ID=1,Name="abc"};
Expression<Func<T, bool>> exprTree = o => o.ID == t.ID;
ParameterExpression param = (ParameterExpression)exprTree.Parameters[0];
BinaryExpression operation = (BinaryExpression)exprTree.Body;
ParameterExpression left = (ParameterExpression)operation.Left;//这里出错
ConstantExpression right = (ConstantExpression)operation.Right;
Console.WriteLine("Decomposed expression:{0}=>{1}{2}{3}",
param.Name,left.Name,operation.NodeType,right.Value);
}
}
public class T
{
public int ID { get; set; }
public string Name { get; set; }
}
Expression.Lambda(right).Compile().DynamicInvoke()