2017-01-20 13 views
1

У меня есть список объявлений, которые я хочу фильтровать. Объявления имеют только один рейтинг контента: G, PG, PG13 или R. В настоящий момент у меня есть метод, который может фильтровать через список, если я укажу ровно один рейтинг контента. Например, если я перехожу в «G» в свой метод, я возвращаю элементы в списке только с рейтингом содержания «G».Метод фильтрации списка с использованием логических операторов && ||

Если бы я должен был предоставить два рейтинга контента, например «G» и «PG», метод ничего не возвращает, потому что он ищет объявления с рейтингом контента «G» и «PG», и такие объявления несуществуют потому что с каждым объявлением связано только одно содержание.

Я хочу переписать мой метод, чтобы, если я передаю два рейтинга контента, скажем «G» и «PG», он вернет список объявлений с «G» или «PG».

Это часть моего метода, который необходимо решить:

adList = adList.Where(ad => ad.IsG == filter.ContentRatings.IsG 
     && ad.IsPG == filter.ContentRatings.IsPG 
     && ad.IsPG13 == filter.ContentRatings.IsPG13 
     && ad.IsR == filter.ContentRatings.IsR); 

редактировать: фильтр класса, ad.IsPG и filter.ContentRatings.IsG (IsPG13, ISR, ISG) являются логические значения , если вам интересно, это не сработает.

adList = adList.Where(ad => ad.IsG == filter.ContentRatings.IsG 
     || ad.IsPG == filter.ContentRatings.IsPG 
     || ad.IsPG13 == filter.ContentRatings.IsPG13 
     || ad.IsR == filter.ContentRatings.IsR); 
+1

Можете ли вы поделиться больше вашего текущего метода? Являются ли параметры только входящими в строку? Как параметры используются в той части, которую вы предоставляете? – arbitrarystringofletters

+0

Почему бы вам не попробовать с '||', как указано в названии. и что такое «фильтр» в этом сценарии? где он определен? –

ответ

4

Проблема в том, что вы проверяете все значения, где вы должны только проверять значения объявлений, для которых для фильтра установлено значение true.

Может быть какой-то код будет сделать его более ясным:

adList = adList.Where(ad => 
      filter.ContentRatings.IsG && ad.IsG 
     || filter.ContentRatings.IsPG && ad.IsPG 
     || filter.ContentRatings.IsPG13 && ad.IsPG13 
     || filter.ContentRatings.IsR && ad.IsR); 

Насколько я помню && вычисляется перед ||

+0

Это работает! Это решение полностью ускользнуло от меня. Благодаря! – d1du

2

Тогда вы должны использовать оператор или оператор || а не & & оператор. С помощью & & проверяется, чтобы оба левого и правого операнда были истинными. Другими словами, ваше утверждение будет возвращать только те значения, где все четыре условия истинны.