сформировать список товаров категории - PullRequest
1 голос
/ 26 апреля 2020

Я разрабатываю приложение для магазина, и мне нужно показать товары каждой категории. Проблема в том, что каждый продукт создается из шаблона продукта, который хранится в таблице, и каждый шаблон связан с категорией. вот модель продукта:

    namespace fardashahr.Models
{
    [Table("Product")]
    public class ProductModel
    {
        public ProductModel()
        {
            if (Specs == null)
            {
                Specs = new Dictionary<string, SpecItemsModel>();
            }
        }
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }

        [Required]
        public int ProductTemplateId { get; set; }

        [Required]
        public bool IsPublished { get; set; }

        [Required]
        public bool InStock { get; set; }

        [Range(95, 110)]

        public float SyncRate { get; set; }


        public DateTime? ProductionDate { get; set; }

        [Required]
        public DateTime RegisterationDate { get; set; }

        public string ImageName { get; set; }

        public IEnumerable<string> GalleryImages { get; set; }

        [NotMapped]
        public Dictionary<string, SpecItemsModel> Specs { get; set; }

        [ForeignKey("ProductTemplateId")]
        public virtual ProductTemplateModel ProductTemplate { get; set; }

        [ForeignKey("ManufacturerId")]
        public virtual CodingItemModel Manufacturer { get; set; }

        [ForeignKey("BrandId")]
        public virtual CodingItemModel Brand { get; set; }

        [ForeignKey("ModelId")]
        public virtual CodingItemModel Model { get; set; }

        [ForeignKey("SeriesId")]
        public virtual CodingItemModel Series { get; set; }
    }
}

, а вот шаблон продукта:

    namespace fardashahr.Models
{
    [Table("ProductTemplate")]
    public class ProductTemplateModel
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
        public int Id { get; set; }


        [StringLength(500)]
        public string Name { get; set; }

        [Required]  
        public int CategoryId { get; set; }


        [StringLength(500)]
        public string Description { get; set; }

        [ForeignKey("CategoryId")]
        public virtual CategoryModel Category{ get; set; }

    }
}

, а контроллер:

namespace fardashahr.Controllers
{
    public class ProductsController : Controller
    {
        // GET: Products
        public ActionResult Index()
        {
            return RedirectToAction("Index", "Home");
        }

        public ActionResult Category(string name)
        {
            //declare a list of products
            List<ProductModel> productList;

            using(MainModel db = new MainModel())
            {
                //get category id
                CategoryModel category = db.Categories.Where(x => x.CategorytUrl == name).FirstOrDefault();
                int catId = category.Id;

                //initialize the list
                productList = db.Products.Where(x => x. == catId).ToList();
            }



        }
    }
}

наконец, что я хочу знать, как инициализировать список продуктов.

1 Ответ

0 голосов
/ 26 апреля 2020

В ваших моделях вы добавили ключевое слово virtual, которое указывает, что свойство навигации будет загружаться автоматически без необходимости в выражении LINQ lambda .include().

Следовательно, вы можете сразу получить доступ к свойству навигации и загрузить список следующим образом;

productList = db.Products.Where(x => x.ProductTemplate.CategoryId == catId).ToList();

string categoryNameOfFirstProduct = productList.FirstOrDefault().ProductTemplate.Category.Name;

string categoryNameOfFirstProduct = productList.FirstOrDefault().ProductTemplate.Category.CategorytUrl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...