Linq 生成lambda表达式-类型转换错误

Linq 生成lambda表达式-类型转换错误,linq,lambda,linq-to-entities,generic-programming,Linq,Lambda,Linq To Entities,Generic Programming,我有一个过滤实体列表的通用方法,过滤是通过生成lambda表达式完成的: protected object initFilters<TEntity>(string targetEntity, List<SearchItem> searchItems, int page_size = 20, int offset = 0 , ExpressionSortCriteria<TEntity, string> SortCriteria) { var Search

我有一个过滤实体列表的通用方法,过滤是通过生成lambda表达式完成的:

protected object initFilters<TEntity>(string targetEntity, List<SearchItem> searchItems, int page_size = 20, int offset = 0 , ExpressionSortCriteria<TEntity, string> SortCriteria)
{
   var SearchQuery = new SearchQuery<TEntity>();

   if (searchItems != null)
   {
      var predicat = ExpressionBuilder.GetExpression<TEntity>(searchItems).Compile();
      SearchQuery.AddFilter(predicat);
   }
   //SearchQuery.AddSortCriteria(new ExpressionSortCriteria<Profile, string> { SortExpression = (profile => profile.Libelle), Direction = SortDirection.Ascending });
   SearchQuery.Skip = offset;
   SearchQuery.Take = page_size;

   return (object)SearchQuery;
}
我的
AddFilter
(在
searchQuery
中)如下所示:

public void AddFilter(Expression<Func<TEntity, Boolean>> filter)
{
    Filters.Add(filter);
}
错误:

无法从System.Func转换为System.Linq.Expressions.Expression>

正如你所看到的,我的两种方法是

Expression<Func<T, bool>>
表达式

你知道怎么解决这个问题吗?

在你的评论中,你说你做了什么

var SearchQuery = new SearchQuery<TEntity>(); 
if (searchItems != null) { 
  var predicat = ExpressionBuilder.GetExpression<TEntity>(searchItems).Compile();          
  SearchQuery.AddFilter(predicat); 
}
var SearchQuery=newsearchquery();
如果(searchItems!=null){
var predict=ExpressionBuilder.GetExpression(searchItems.Compile();
AddFilter(谓词);
}
当然,如果编译表达式,它就不再是
表达式
,而是
Func

AddFilter将
表达式
作为参数


所以。。。删除
Compile()

不,我是这样做的:var SearchQuery=newsearchquery();if(searchItems!=null){var predict=ExpressionBuilder.GetExpression(searchItems.Compile();SearchQuery.AddFilter(predict);}
Expression<Func<T, bool>>
var SearchQuery = new SearchQuery<TEntity>(); 
if (searchItems != null) { 
  var predicat = ExpressionBuilder.GetExpression<TEntity>(searchItems).Compile();          
  SearchQuery.AddFilter(predicat); 
}