Запрос LINQ на самом деле не обязательно должен быть одним оператором, его можно построить по частям. Когда вы создаете запрос LINQ, он фактически ничего не делает с исходными данными, он просто создает выражение интерфейсов IEnumerable / IQueryable, которые основываются друг на друге. Пока вы не выполняете его, перечисляя его или вызывая метод, подобный ToList()
, вы можете продолжать добавлять запрос, и он еще не будет выполнен.
Вы хотите что-то вроде этого:
// create original query, no filters
var query = from x in whatever....;
// add each filter one by one
if (condition1)
{
query = query.Where(row => condition 1 expression);
}
if (condition2)
{
query = query.Where(row => condition 2 expression);
}
if (condition3)
{
query = query.Where(row => condition 3 expression);
}
if (condition4)
{
query = query.Where(row => condition 4 expression);
}