Я нашел способ, я написал класс BaseExtension, в котором не так уж много, просто держатель для некоторых свойств
public static BaseExtension<T> Start<T, TValue>(this IQueryable<T> input, TValue value, Func<TValue, Expression<Func<T, bool>>> expression) =>
new BaseExtension<T>(input, value == null ? null : expression.Invoke(value));
это позволяет мне писать
_context.MyEntities.Start(myVar, value => entity => entity.Id.ToString() == myVar)
и передача в myVar позволяет мне делать c # логику за кулисами, прежде чем запрос будет выполнен в базе данных.
Примером может быть myVar! = Null, или я могу добавить пользовательскую функцию, которая будет применять выражение или нет