使用C#表达式评估器进行过滤列表



我们有一个List<SomeType>,并希望能够在其上运行不同的操作,例如选择满足某些条件的元素。我们希望用户在文本中提供这些测试,因此正在查看C#表达式评估器。

当然可以将其用于此目的,但是我很难判断使用LINQ时csharpeval委托是否可以用作LAMBDA。我们希望将存储的表达式应用于每个对象。

例如。只需 "o.FirstName == "Tom"存储整个列表表达式,例如 list.Where(o => o.FirstName == 'Tom')

通过ScopeCompile提供了一次表达式并反对不同输入数据运行的方法,但我不确定这些是否与lambda方法兼容。谁能帮我吗?

i这是您想要的:

var expression = new CompiledExpression<bool>("MyProperty > 10");
var func = expression.ScopeCompile<MyClass>();

示例用法:

class MyClass
{
    public int MyProperty { get; set; }
}
var list = Enumerable.Range(1, 50).Select(x => new MyClass { MyProperty = x });
var expression = new CompiledExpression<bool>("MyProperty > 10");
var func = expression.ScopeCompile<MyClass>();
var filtered = list.Where(p => func(p));
Console.WriteLine(filtered.Count()); //40

您可以创建一个助手函数来创建lambda函数:

Func<T, bool> GetLambda<T>(string inputExp)
{
    var expression = new CompiledExpression<bool>(inputExp);
    return expression.ScopeCompile<T>();
}

用法:

var func = GetLambda<People>("Id < 5");
Peoples.Where(p => func(p)).Dump();

最新更新