2015-12-23 4 views
0

Я работаю над проектом Book Manager.список фильтров по нескольким атрибутам

Предположит, что у меня есть книги класс вроде этого:

public class Book { 
    public string Name; 
    public List<string> Tags; 
} 

и у меня также есть список книг и некоторые флажки имеют одинаковое значение тегов для пользователя, чтобы выбрать, какие тег они будут использовать для фильтрации списка книги.

Я хочу фильтровать список книг по тегам, которые пользователь выбрал, и поместить результат в новый список.

Пример:

Книга1 имеет {A, B, C} теги, Book2 имеет {A, B, D} теги и book3 имеет {, E, D F} меток. Поэтому, если пользователь выбирает теги A и B для фильтрации, новый список будет содержать Book1 и Book2. Или, если они выбрали фильтр D для фильтрации, новый список будет содержать Book3.

ответ

1

Попробуйте использовать Linq:

List<Book> Books = yourList; 
Books = Books.Where(a=>a.Tags.Where(z=>z.Intersect(userList).Any()).ToList() 

Вы должны использовать Intersect, чтобы найти элементы в списке, чем содержит любой элемент в другой.


Из замечаний, кажется, что вы не знаете много о Linq, «а» и «г» являются LAMDA выражения, которые вы можете увидеть его как цикл Еогеасп:

Books.Where(a=>a.Tags == "a") 

эквивалентно:

foreach(Book item in Books) 
{ 
    if(item.Tags == "a") 
    { 
    //Add item to your result; 
    } 
} 
+0

Вы можете объяснить мне a => a и z => z для меня? или, может быть, некоторые документы для меня, чтобы прочитать об этом? Спасибо! – tuankhoa1996

+0

Пожалуйста, взгляните на мое редактирование – User2012384

+1

Дополнительная информация о функциях лямбда: https://msdn.microsoft.com/en-us/library/bb397687.aspx –

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