<Func> 在循环中创建表达式



我需要创建一个表达式以使其像:

 Expression<Func<MyDataSet, bool>> searchfilter = null;
 string[] strsearchvalues = Searchvalues.Split(',');
 searchfilter = p => p.searchcolumn.contains(strsearchvalues[0]) && p.searchcolumn.contains(strsearchvalues[1]) && ....

我尝试了这个,但它不起作用:

Expression<Func<MyDataSet, bool>> columnfilter = null;
foreach(var s in strsearchvalues)
{
   columnfilter =  p => p.searchcolumn.contains(s);
  searchfilter = columnfilter.And(columnfilter);
}

如果搜索值是"鲍勃·史密斯",我想返回结果,列包含鲍勃和史密斯,例如"鲍勃·史密瑟"或" smither boby'。使用上述代码,它返回"鲍比"或"史密斯的东西"。

如何使用循环创建一个表达式以完成它?

谢谢!

尝试这样做:

Expression<Func<MyDataSet, bool>> columnfilter = null;
foreach(var s in strsearchvalues)
{
   columnfilter = columnfilter == null ? p => p.searchcolumn.contains(s) : columnfilter.And(p => p.searchcolumn.contains(s)) ;
}
searchfilter  = columnfilter;

希望这对您有帮助...

最新更新