Linq 生成lambda表达式-类型转换错误
我有一个过滤实体列表的通用方法,过滤是通过生成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
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);
}