按多个属性筛选列表

本文关键字:筛选 列表 属性 | 更新日期: 2023-09-27 18:27:45

我正在做一个Book Manager项目。

假设我有这样的Book类:

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

我还有一个图书列表,一些复选框有相同的标签值,供用户选择他们将使用哪些标签来过滤图书列表。

我想要的是通过用户选择的标签来过滤图书列表,并将结果放入新的列表中。

示例:

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

按多个属性筛选列表

尝试使用Linq:

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

您必须使用"交集"在列表中查找项目,而不是在另一个列表中查找包含任何项目的项目。


从备注中,你似乎对Linq不太了解,"a"answers"z"是lamda表达式,你可以将其视为foreach循环:

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

相当于:

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