2010-11-04 2 views
0

Я передаю модель фильтра в свою службу. Пользователь может выбрать any, который является null или пустой строкой. Как настроить одноразовый запрос .Where, который будет знать, чтобы игнорировать этот фильтр?Фильтр LINQ или все

Пример:

public class UserFilterModel 
{ 
    public string State {get; set;}; 
    public string Age {get; set;}; 
} 

Фильтр: (Как мне сделать это лучше соответствовать моим потребностям)

var result = context.Users.Where(u => u.State == filter.State && u.Age == filter.Age); 

Таким образом, если пользователь выбирает нулевой или пустым State, это будет в настоящее время возвращать записи с нулевыми или пустыми состояниями, когда я действительно хочу игнорировать этот фильтр.

Кроме того, я использую asp.net mvc 2, incase Я делаю что-то совершенно неправильное, пожалуйста, скажите мне. Использование шаблона репозитория.

ответ

1

Вот один из способов:

var result = context.Users.Where(
    u => (String.IsNullOrEmpty(filter.State) || u.State == filter.State) && 
     (String.IsNullOrEmpty(filter.Age) || u.Age == filter.Age) 
); 
+0

насчет целых чисел, если это 0, как мне справиться с этим? –

+0

@Shawn McLean: Вы имеете в виду, если у вас есть свойство (например, 'DriverLicenseNumber'), и вы хотите игнорировать' DriverLicenseNumber', если 'filter.DriverLicenseNumber == 0' является' true'? Просто '(filter.DriverLicenseNumber == 0 || u.DriverLicenseNumber == filter.DriverLicenseNumber)'. Все дело в том, чтобы использовать короткое замыкание в ваших интересах. – jason

Смежные вопросы