You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过LINQ导航获取产品关联分类名称及查询语法优化问题

解决方案:获取关联分类名称并改用查询语法

首先,咱们先解决核心问题:要拿到ProductInCategory对应的ProductCategory的Title,关键是让EF Core加载ProductInCategory和ProductCategory之间的关联数据。然后再把查询改成可读性更强的查询语法,同时正确映射到你的ViewModelProduct。


1. 关键修改点:加载关联的分类数据

不管用哪种查询语法,你需要确保EF Core能获取到ProductInCategory关联的ProductCategory对象。有两种可靠方式:

  • 预加载(Include + ThenInclude):明确告诉EF要加载嵌套的导航属性
  • 投影时直接选择属性:在创建ViewModel时直接引用ProductCategory的属性,EF会自动查询对应数据

2. 改用查询语法的正确实现

下面是完全符合你需求的查询语法代码,直接映射到ViewModelProduct,同时能获取到分类的Title:

var product = (from p in _context.Products
               where p.Id == id
               select new ViewModelProduct
               {
                   Id = p.Id,
                   Title = p.Title,
                   Info = p.Info,
                   Price = p.Price,
                   // 填充InCategories并包含关联的ProductCategory核心数据
                   InCategories = p.InCategories.Select(pc => new ProductInCategory
                   {
                       Id = pc.Id,
                       ProductId = pc.ProductId,
                       SortOrder = pc.SortOrder,
                       ProductCategoryId = pc.ProductCategoryId,
                       ProductCategory = new ProductCategory
                       {
                           Id = pc.ProductCategory.Id,
                           Title = pc.ProductCategory.Title,
                           SortOrder = pc.ProductCategory.SortOrder,
                           ParentId = pc.ProductCategory.ParentId
                       }
                   }).ToList(),
                   // 直接填充分类集合,方便视图快速遍历分类名称
                   Categories = p.InCategories.Select(pc => pc.ProductCategory)
               }).SingleOrDefault();

3. 为什么之前的查询语法失败?

你之前的查询返回的是匿名类型,而视图需要的是ViewModelProduct类型,类型不匹配直接导致渲染失败。上面的代码直接在select中创建ViewModelProduct实例,把所有需要的属性一一映射好,就能解决这个问题。


4. 视图中如何使用分类Title?

现在你可以在视图里通过两种方式轻松获取分类名称:

  • 遍历InCategories:@foreach (var item in Model.InCategories) { @item.ProductCategory.Title }
  • 直接遍历Categories:@foreach (var category in Model.Categories) { @category.Title }

内容的提问来源于stack exchange,提问作者Stian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:12:13