Полагаю, вы говорите о фильтрации объектов на основе первоначально неизвестного числа условий.
LINQ не оценивает ваш запрос, пока вы явно не зададите его, перечислив его (используя foreach, ToList (), ToArray () ...). И когда вы это сделаете, в зависимости от реализации LINQ (SQL, объекты, XML и т. Д.), Запрос будет оптимизирован.
AFAIK, все реализации способны оптимизировать «где условие1, где условие2» в «где условие1 && условие2».
Это означает, что вы просто должны добавить свои условия фильтрации по одному. Например:
private List<User> FilterUsers(string username, string userid, int? minAge, int? maxAge)
{
IEnumerable<User> query = GetUsers();
if (!string.IsNullOrEmpty(username)) query = query.Where(u => u.Username.StartsWith(username);
if (!string.IsNullOrEmpty(userid)) query = query.Where(u => u.Userid == userid);
if (minAge != null) query = query.Where(u => u.Age >= minAge.Value);
if (maxAge != null) query = query.Where(u => u.Age <= maxAge.Value);
return query.ToList();
}
Здесь GetUsers () должен возвращать IEnumerable. Может быть таблицей, если вы используете LINQ-to-SQL, ChildNodes (), если вы используете LINQ-to-XML. Попробуйте перечислить как можно меньше до применения ваших предложений where.