我目前正在构建一个包含类别和多个子类别的网络应用,请考虑您的普通购物网站。
1. Category 1
1.1 Sub-Category
1.2 Sub-Category
1.2.1 Sub-Category
2. Category 2
2.1 Sub-Category
类别类的结构如下:
public class ProductType
{
public int ID { get; set; }
public string Name { get; set; }
public ProductType Parent { get; set; }
}
然后,每个产品都继承ProductType类,并由ID引用。我正在使用PredicateBuilder构建搜索,问题是在进行搜索时以递归方式查找某个类别中的所有产品。
到目前为止我的方法是:
if (category != null && category.Length != 0)
{
foreach (string keyword in category)
{
int id = _context.ProductType.FirstOrDefaultAsync(p => p.Name == keyword).Result.ID;
predicate = predicate.Or(p => p.ProductType.Parent.ID == id);
predicate = predicate.Or(p => p.ProductType.ID == id);
}
}
如果您搜索类别1(来自上面的示例),您当然只会获得1,1.1和1.2中的产品。 1.2.1子类别的产品将不包括在内(不足为奇)。
你如何解决这个问题?我的猜测是以递归方式执行,将结果ID传递给函数并查找具有该父ID的下一类子项。对于谓词构建器,这是不可能的(因为您构建了一个查询,而不是获取结果......)。