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。