字符串包含在lambda反射表达式中

时间:2018-07-24 09:26:05

标签: c# asp.net-core lambda .net-core

我正在尝试使用this example将表字段名称动态传递给查询,并避免对每个表字段重复进行频繁的查询操作。

示例中包含并根据需要进行编辑的代码如下:

localPlayer

它适用于数字字段,因为它在Expression<Func<T, bool>> GreatherThan<T>(string field, string value) { ParameterExpression B = Expression.Parameter(typeof(T)); return Expression.Lambda<Func<T, bool>>( Expression.GreaterThan( Expression.PropertyOrField(B, field), Expression.Constant(value)), B); } 下具有我需要的数字字段的每个操作(等于,不等于,大于/小于等)。

但是似乎没有对字符串进行任何操作,例如Expression或类似的字符串。当然是ContainsEqual除外。< / em>)

如何实现以下目标? (目前在语法上是错误的,但这只是出于示例目的)

NotEqual

1 个答案:

答案 0 :(得分:1)

您必须在字符串对象上调用方法:

    var s = Expression.Parameter(typeof(string), "s");
    var term = Expression.Parameter(typeof(string), "term");


    var contains = Expression.Call(s, typeof(string).GetMethod("Contains"), term);

    Func<string, string, bool> lambda = Expression.Lambda<Func<string,string,bool>>(contains, s, term).Compile();


    Console.WriteLine(lambda("test", "e")); //True