Используя метод Combine
из этого сообщения делает почти все, что вам нужно. Оттуда вам просто нужно превратить буквальное значение в выражение, которое его вычисляет (или, я думаю, изменить метод Combine
из этого ответа, чтобы промежуточное значение не вычислялось из лямбда, а было просто любым выражением) и затем вызовите функцию.
protected IEnumerable<TColumn> FilterIds;
protected Expression<Func<T, IEnumerable<TColumn>> FilterIdsExpression => _ => FilterIds;
protected Expression<Func<T, IEnumerable<TColumn>, bool>> Filter;
public virtual IQueryable<T> ApplyFilter(IQueryable<T> query)
{
if (FilterMode == FilterModeMatchAny && HasFilterIds)
{
return query.Where(FilterIdsExpression.Combine(Filter));
}
return query;
}