Вместо того, чтобы строить лямбда-выражение, постройте запрос по битам:
IQueryable<Product> productQuery = db.Products;
if (userHasSpecifiedPrice)
{
productQuery = productQuery.Where(p => p.Price == userSpecifiedPrice)
}
// etc
Обратите внимание, что не выполнит запрос, пока вы не начнете использовать результаты.
Составление запроса - одна из ключевых сильных сторон LINQ. (Состав дерева выражений - это то, что вам нужно сделать, если вы хотите один Where
вызов, - к сожалению, это сложнее.)