Я хотел бы иметь общий метод фильтрации Entity Framework IQueryable<TItem>
по IEnumerable<TEnum>
. Его подпись должна, вероятно, выглядеть следующим образом:Общий метод запроса Entity Framework
public static IQueryable<TItem> ApplyFilter<TItem, TEnum>(IQueryable<TItem> items, IEnumerable<TEnum> enumValues, Expression<Func<TItem, IEnumerable<TEnum>, bool>> predicate)
{
return items.Where(??????);
}
, и я хотел бы быть в состоянии назвать его, например, как это:
IQueryable<Request> requests = service.GetAllRequests();
IEnumerable<RequestState> states = new RequestState[] {RequestState.Active, RequestState.Closed};
Expression<Func<Request, IEnumerable<RequestState>, bool>> predicate = (r, s) => s.Contains(r.State);
requests = ApplyFilter(requests, states, predicate);
Но что должно быть тело внутри метода? Как я могу преобразовать Expression<Func<TItem, IEnumerable<TEnum>, bool>>
в Expression<Func<TItem, bool>>
для использования в качестве параметра метода «Где»? Будет ли он работать с Entity Framework?
Да, это, вероятно, решение, которое я буду использовать. Я просто надеялся получить что-то еще более общее, то есть не ограничиваться методом «Содержит». Спасибо, что ответили. –