2011-09-27 43 views
2

Here是描述動態創建謂詞的方式的帖子。這裏是一個片段:使用表達式類構建LINQ表達式時使用正則表達式進行搜索

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 = Expression.Regexp(
     len, @"\D+"); 

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

回答

1

您可以使用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); 
     } 
+0

謝謝,你有任何代碼示例? –

+0

看到我編輯的答案 –

+0

這個字符串來自哪裏 - 「IsMatch」? –