Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用表达式类构造LINQ表达式时使用regexp进行搜索_C#_.net_Lambda - Fatal编程技术网

C# 使用表达式类构造LINQ表达式时使用regexp进行搜索

C# 使用表达式类构造LINQ表达式时使用regexp进行搜索,c#,.net,lambda,C#,.net,Lambda,这篇文章描述了动态创建表达式谓词的方法。以下是一个片段: var param = Expression.Parameter(typeof(string), "p"); var len = Expression.PropertyOrField(param, "SomeText"); var body = Expression.Equal( len, Expression.Constant("Text")); var lambda = Expression

这篇文章描述了动态创建
表达式
谓词的方法。以下是一个片段:

 var param = Expression.Parameter(typeof(string), "p");
    var len = Expression.PropertyOrField(param, "SomeText");
    var body = Expression.Equal(
        len, Expression.Constant("Text"));

    var lambda = Expression.Lambda<Func<string, bool>>(
        body, param);
var param=Expression.Parameter(typeof(string),“p”);
var len=Expression.PropertyOrField(param,“SomeText”);
var body=表达式。等于(
len,表达式常数(“文本”);
var lambda=表达式.lambda(
体,参数);
我想知道如何将regexp应用于字符串而不是相等。有可能吗? 可能的伪代码如下所示:

 var param = Expression.Parameter(typeof(string), "p");
    var len = Expression.PropertyOrField(param, "SomeText");
    var body = Expression.Regexp(
        len, @"\D+");

    var lambda = Expression.Lambda<Func<string, bool>>(
        body, param);
var param=Expression.Parameter(typeof(string),“p”);
var len=Expression.PropertyOrField(param,“SomeText”);
var body=Expression.Regexp(
len,@“\D+”;
var lambda=表达式.lambda(
体,参数);

您可以使用
Expression.Call(Type Type,string methodName,Type[]typeArguments,params Expression[]arguments)
调用检查正则表达式的测试方法

 List<string> lista = new List<string>() { "aaaa", "aaabb", "aaacccc", "eee" };

        var param = Expression.Parameter(typeof(string), "s");
        var pattern = Expression.Constant("\\Aa");

        var test = Expression.Call(typeof(Regex), "IsMatch", null, param, pattern);

        var lambda = Expression.Lambda<Func<string, bool>>(test, param);

        IEnumerable<string> query = lista.Where(lambda.Compile());

        foreach (string s in query) 
        {
            Console.WriteLine(s);
        }
List lista=newlist(){“aaaa”、“aaabb”、“aaacccc”、“eee”};
var param=Expression.Parameter(typeof(string),“s”);
变量模式=表达式常数(“\\Aa”);
var test=Expression.Call(typeof(Regex),“IsMatch”,null,param,pattern);
var lambda=表达式.lambda(测试,参数);
IEnumerable query=lista.Where(lambda.Compile());
foreach(查询中的字符串s)
{
控制台。写入线(s);
}

这个字符串从哪里来-“IsMatch”?假设您有以下结构var data=new List{new TestClass{Name=“valvoline”,Quantity=3},new TestClass{Name=“castrol”,Quantity=3},新测试类{Name=“valve”,数量=1},};您希望使用下一个条件var queryItems=new List{new QueryItem{Caption=“Name”,Value=“v*”,Separator=NextItem.Last};@Hohhi isMatch是Regex的一个方法。在您最初的问题中,您询问了正则表达式检查。在本例中,如何替换Regex。