ASP.NET Core PredicateBuilder具有多个类别和子类别

时间:2018-02-24 12:34:03

标签: c# asp.net-core categories predicatebuilder

我目前正在构建一个包含类别和多个子类别的网络应用,请考虑您的普通购物网站。

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的下一类子项。对于谓词构建器,这是不可能的(因为您构建了一个查询,而不是获取结果......)。

0 个答案:

没有答案