РЕДАКТИРОВАТЬ: исправления Крейг.
Я оставляю это здесь, потому что я думаю, что это ценный инструмент: используйте linqkit !Но не для решения этого вопроса: -)
Вместо того, чтобы возвращать IQueryable, используйте Expression для выделения предикатов.Например, вы можете определить следующий статический метод для Article:
public static Expression<Func<Article,bool>> IsLive()
{
return x =>
x != null
&& DateTime.UtcNow >= x.PublishTime
&& x.IsPublished
&& !x.IsDeleted
}
Затем убедитесь, что при создании запроса сохранена ссылка на это выражение, что-то вроде (не проверено):*