エンティティのリストをフィルタリングする一般的なメソッドがあります。フィルタリングは、ラムダ式を生成することによって行われます。
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;
}
MySearchQuery
には、リストに適用される基準が含まれています。
私の述語は、この方法でメソッドによって構築されます:
public static Expression<Func<T, bool>> GetExpression<T>(IList<SearchItem> filters)
{
some code ...
return Expression.Lambda<Func<T, bool>>(exp, param);
}
私のAddFilter
(のsearchQuery
)は次のようなものです:
public void AddFilter(Expression<Func<TEntity, Boolean>> filter)
{
Filters.Add(filter);
}
この行に問題があります:
SearchQuery.AddFilter(predicat);
エラー:
System.Func から System.Linq.Expressions.Expression に変換できません>
ご覧のとおり、私の2つの方法は使用しています
Expression<Func<T, bool>>
これを解決する方法を教えてください。