按多个属性过滤列表

时间:2015-12-23 02:21:57

标签: c#

我正在从事图书经理项目。

假设我有这样的Book类:

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

我还有一个Book of Book和一些复选框具有相同的标签值,供用户选择用于过滤Book of Book的标签。

我想要的是按用户选择的标签过滤Book of Book,并将结果放入新列表。

示例:

Book1有{A,B,C}标签,Book2有{A,B,D}标签,Book3有{D,E,F}标签。因此,如果用户选择A和B标签进行过滤,则新列表将包含Book1和Book2。或者如果他们选择D标签进行过滤,新列表将包含Book3。

1 个答案:

答案 0 :(得分:1)

尝试使用Linq:

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

您已使用Intersect查找列表中的项目,而不是包含另一项目中的任何项目。

从评论中可以看出,你对Linq,&#34; a&#34;和&#34; z&#34;是lamda表达式,您可以将其视为foreach循环:

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

相当于:

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