我正在使用产品的ms-sql db构建一个 asp.net 网站 - 每个产品属于一个或多个类别,每个类别可以属于一个或零个父类别。
用户应该能够选择零个或多个类别,但我想不出一种方法来只返回所选类别中的产品。
我有其他正在工作的过滤器(最低价格,品牌名称等),但不能让类别工作。
例如:
-Category 1
|---Sub-Category 1.1
|---Sub-Sub-Category 1.1.1
|---Sub-Sub-Category 1.1.2
|---Sub-Category 1.2
|---Sub-Category 1.3
如果选择了类别1,则应返回具有最终父类别为类别1的类别的所有产品。
如果选择了子类别1.1和子类别1.2,则所有具有最终父类别1.1或子类别1.2的类别的产品都应返回。
这是我的代码:
产品:
public class Product
{
[Key]
public int ProductID { get; set; }
public string Description {get;set;}
public double Price {get;set;}
public virtual List<Category> Categories { get; set; }
public Product()
{
Categories = new List<Category>();
}
}
类别:
public class Category
{
[Key]
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public int? ParentCategoryID { get; set; }
[JsonIgnore]
public Category Parent { get; set; }
[JsonIgnore]
public virtual List<Product> Products { get; set; }
}
简化的WebApi控制器:
public object Get( [FromUri] string[] categories)
{
List<Product> search_results = (from p in db.Products
where 1==1
&& p.Price >= minPrice && p.Price <=maxPrice
// only return products in selected categories
select p).ToList();
}
如果您对子类别没有限制,您可以使用递归:
public object Get( [FromUri] string[] categories)
{
var categories = db.Categories.Where(c => categoriesIds.Contains(c.Id));
Func<Product, bool> filters = p => 1==1
&& p.Price >= minPrice && p.Price <=maxPrice
return GetCategoryiesProducts(categories, filters)
}
public IList<Product> GetCategoryiesProducts(IList<Category> categories, Func<Product, bool> filters)
{
var result = new List<Product>();
foreach (var c in categories)
{
result.AddRange(c.Products.Where(filters).ToList());
var subCategories = db.Categories.Where(s => s.ParentCategoryID != null && (int)s.ParentCategoryID == c.Id))
if (subCategories != null && subCategories.Count > 0)
{
result.AddRange(GetCategoryiesProducts(subCategories, filters))
}
}
List<Product> search_results result;
}
但如果有很多类别,这将是一个昂贵的解决方案。为了优化效率,您可以向每个父类别添加产品以消除递归:
List<Product> search_results = (from p in db.Products
where 1==1
&& p.Price >= minPrice && p.Price <=maxPrice
&& p.Categories.Any(c => categoriesIds.Contains(c.Id))
select p).ToList();
我目前有一个代码片段,其中对于每个类别,它将找到子类别: 将递归获取一个类别的子级: 目前,使用,只检索子类别的子类别,因此如果每个子类别都有自己的子类别,则不会将其保存到子类别中。 我如何显示子子类别给我们的子类别? 我想用我的代码做的是获取一个父级,获取它的子级,然后将这些子级中的每一个视为父级,递归地获取它的子级,但是我的JSON输出并没有反映这一点。只有父对象有子对象-子对象没有子对象(尽
我已经为产品创建了一些自定义类别,它有子类别,子类别还有更多的子类别。现在我首先显示主要类别。如果我在那里显示子类别,那么将显示与该类别及其子类别相关的所有子类别。我想一步一步地向他们展示。也就是说,如果用户单击主类别,则会转到其子类别页面。如果用户单击其子类别之一,则应转到子类别,如果没有子类别,则显示产品。这是什么代码 它覆盖了以前的排序顺序。也就是说,如果从仪表板中,我们按排序顺序给出2到3
我的类别表设计如下 我有三个级别的类别 < li >父项 < li >孩子 < li >子系 如何以下列方式显示它们? (SELECT*From类别):我得到以下数组,如下所示
我正试图通过WoodPress主题中的一个函数从woocommerce获取产品类别,我已经做到了: 这将按层次列出所有顶级类别及其下的子类别,但我有子类别(子类别)的子类别,因此如何列出这些子类别。
我试图在html表中输出类别和子类别,我有一个问题,即所有的子类别都打印在所有的类别下 我用这个公式 cat_id 猫名 母猫 我想打印父主类别下的每个子类别 我使用这个代码 还有显示器。第三方物流是 有什么想法吗,伙计们 问候
我想有类别和子类别,所以我创建了一个表 类别:id、名称、页面id、家长id 这是我的应用程序/模型/Categories.php模型 这是我的应用程序/模型/Pages.php模型 然后在我的控制器中,我调用模型 这是可行的,但问题是返回了所有类别,我只想要那些具有parent\u id=0(如果parent\u id 我还想知道如何生成类别和子类别的数组,这样我也可以返回这些信息