评估存储在字符串参数中的lambda表达式
问题描述:
请检查以下代码
Please check below code
List<Emp> empD = new List<Emp> { new Emp { Name = "a", age = 1 }, new Emp { Name = "b", age = 2 } };
var test = "empD.Where(x=>x.age ==1 )";
var param1 = Expression.Parameter(typeof(Emp), "test");
var lambda = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { param1 }, typeof(Emp), test);
var rest = lambda.Compile();
这里我试图评估lambda表达式但是输入将在字符串参数中给出,它存储表达式。我如何评估以获取实体列表。
预先感谢
Jayanth
Here i am trying to evaluate lambda expression but input will be given in string param , which stores expression.How can i evaluate to get list of entity.
Thanks in Advance
Jayanth
答
请阅读我对该问题的评论。我问那里:你为什么要评估lambda表达式。你没有回答。然而......
简而言之:lambda表达式只不过是内联委托!
看看这里:
Func< T1,T2,TResult>代表 [ ^ ]
在C#中探索Lambda表达式 [ ^ ]
结论:你甚至可以将它作为功能参数使用。
见:
动态查询和LINQ表达式 [ ^ ]
http://stackoverflow.com/questions/14297633 / c-sharp-pass-lambda-expression-as-method-parameter [ ^ ]
示例(就像魅力一样):
Please, read my comment to the question. I asked there: why do you want to evaluate lambda expression. You didn't answered. Nevertheless...
In a few words: lambda expression is nothing else than inline delegate!
Have a look here:
Func<T1, T2, TResult> Delegate[^]
Exploring Lambda Expression in C#[^]
Conclusion: you can use it even as a parameter of function.
See:
Dynamic Queries and LINQ Expressions[^]
http://stackoverflow.com/questions/14297633/c-sharp-pass-lambda-expression-as-method-parameter[^]
Example (works like a charm):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LinqDelegate
{
class Program
{
static void Main(string[] args)
{
List<Emp> empD = new List<Emp> { new Emp("a", 1),
new Emp("b", 2),
new Emp("c", 1),
new Emp("d", 4) };
Func<Emp, int, bool> predicate = (e, i) => e.Age==1;
var qry = empD.Where(predicate).Select(x => x);
foreach (var e in qry)
Console.WriteLine("{0} = {1}", e.Name, e.Age);
Console.ReadKey();
}
class Emp
{
private string sName = String.Empty;
private int iAge = 0;
public Emp(string _Name, int _Age)
{
sName = _Name;
iAge = _Age;
}
public string Name
{
get { return sName; }
set { sName = value; }
}
public int Age
{
get { return iAge; }
set { iAge = value; }
}
}
}
}
结果:
Result:
a = 1
c = 1