按多个属性筛选列表
本文关键字:筛选 列表 属性 | 更新日期: 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;
}
}