Хороший вопрос, существует явная необходимость иметь возможность определить повторно используемое фильтрующее выражение, чтобы избежать избыточного указания логики в разнородных запросах.
Этот метод создаст фильтр, который вы можете передать методу Where.
public Expression<Func<Listing, bool>> GetActiveFilter()
{
return someListing => someListing.Approved && !someListing.Deleted;
}
Затем, позже, позвоните по этому номеру:
Expression<Func<Filter, bool>> filter = GetActiveFilter()
return db.Listings.Where(filter);
Поскольку используется Expression<Func<T, bool>>
, не будет проблем с переводом на sql.
Вот еще один способ сделать это:
public static IQueryable<Filter> FilterToActive(this IQueryable<Filter> source)
{
var filter = GetActiveFilter()
return source.Where(filter);
}
Потом, позже,
return db.Listings.FilterToActive();