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

ASP.NET MVC多对多模式下如何通过LINQ获取多分类下Course表数据?

解决方案

1. 先修复EDMX中的多对多关联

MultiBlogCat是纯多对多关联表(仅包含两个外键且组合为主键),EF数据库优先模式下会自动识别这种关系,不会生成单独的实体类,而是在Blog和Category实体中生成对应的导航属性:

  • Blog实体自动拥有ICollection<Category> Categories
  • Category实体自动拥有ICollection<Blog> Blogs

如果EDMX里没生成该关联,执行以下操作:

  • 打开EDMX设计器,右键空白区域选择**"从数据库更新模型..."**
  • 在更新向导中勾选MultiBlogCat表,完成更新后EF会自动建立多对多导航关系

2. LINQ查询多分类关联的Blog数据(推测你笔误将Blog写为Course,若确为Course需补充表关联结构)

方法一:利用导航属性查询

假设要获取指定分类ID下的所有Blog:

// 示例:获取分类ID为1、2的所有Blog
var targetCategoryIds = new List<int> { 1, 2 };
using (var db = new YourDbContext())
{
    var blogs = db.Categories
                  .Where(c => targetCategoryIds.Contains(c.Id))
                  .SelectMany(c => c.Blogs)
                  .Distinct() // 去重,避免同一Blog被多分类关联时重复返回
                  .ToList();
}

方法二:手动关联查询(导航属性未生效时使用)

如果EDMX更新后仍未生成导航属性,可手动添加MultiBlogCat到EDMX后,直接写关联查询:

var targetCategoryIds = new List<int> { 1, 2 };
using (var db = new YourDbContext())
{
    var blogs = db.Blogs
                  .Join(db.MultiBlogCat,
                        blog => blog.Id,
                        link => link.Blog_Id,
                        (blog, link) => new { Blog = blog, Link = link })
                  .Where(x => targetCategoryIds.Contains(x.Link.Category_Id))
                  .Select(x => x.Blog)
                  .Distinct()
                  .ToList();
}

注:如果问题中的Course表并非笔误,请补充Course与其他表的关联结构,以便提供更精准的查询代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:05:26