Asp.net mvc 以干式方式显示按类别和子类别排序的产品列表

Asp.net mvc 以干式方式显示按类别和子类别排序的产品列表,asp.net-mvc,entity-framework,dry,categories,conventions,Asp.net Mvc,Entity Framework,Dry,Categories,Conventions,我拥有以下实体: public class Product{ public int ID { get; set; } public string Name { get; set; } public string Category { get; set; } public string SubCategory { get; set; } } 我最终希望显示一个页面,该页面采用IEnumerable并首先按类别对产品进行排序,然后按子类别对产品的每个类别进行排序 我

我拥有以下实体:

public class Product{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public string SubCategory { get; set; }
}
我最终希望显示一个页面,该页面采用
IEnumerable
并首先按
类别对
产品进行排序,然后按
子类别对
产品的每个
类别进行排序

我的ViewModel应该是什么样子

起初,我想到了这样的想法:

public class ProductListViewModel{
    public IEnumerable<Product> Products { get; set; }
    public IEnumerable<string> Categories { get; set; }
    public IEnumerable<string> SubCategories { get; set; }
}
公共类ProductListViewModel{
公共IEnumerable乘积{get;set;}
公共IEnumerable类别{get;set;}
公共IEnumerable子类别{get;set;}
}
但是,我的控制器变得充满了逻辑来提取唯一的
类别
子类别
,我没有清晰的方法来处理这样一个事实,即每个
类别
都有不同的
子类别列表

任何有分类分类经验的人-你能告诉我如何干净地处理这种情况的正确方向吗?我可以完成这项工作,但我觉得我正在使我的代码变得毫无必要的草率和枯燥


我还想知道我的
产品
类的结构是否不适合处理
类别
/
子类别
-其他人也有同样的感觉吗?(我认为我的类别可能更适合作为完全独立的对象)

关于您关于模型结构的问题,我认为该类别应该 作为一个单独的实体-您的数据库将处于规范化状态(该类别不应在数据库中重复多次)。也许:

public class Product{
    public int ID { get; set; }
    public string Name { get; set; }
    public Category Category { get; set; }
}

public class Category{
    public int ID { get; set; }
    public string Name { get; set; }
    public SubCategory SubCategory { get; set; }
}


public class SubCategory{
    public int ID { get; set; }
    public string Name { get; set; }
}

通过这种方式,您可以将类别从产品中分离出来(通过在产品实体中使用ICollection,您还可以为单个产品提供多个类别)。这也创建了类别和子类别之间的关系。

您希望如何在视图上显示信息?@DarinDimitrov用户将看到
类别的列表
-他们将单击
类别
,该
类别
中所有产品的列表将滑出。现在可见的
产品列表
将按
子类别进行排序
。看起来非常合理。我现在无法真正关注回应,我会在有时间关注的时候回来评论。这是一个很好的方法来处理我的情况。非常感谢你。