ASP.NET MVC多对多模式下如何通过LINQ获取多分类下Course表数据?
解决方案
1. 先修复EDMX中的多对多关联
MultiBlogCat是纯多对多关联表(仅包含两个外键且组合为主键),EF数据库优先模式下会自动识别这种关系,不会生成单独的实体类,而是在Blog和Category实体中生成对应的导航属性:
Blog实体自动拥有ICollection<Category> CategoriesCategory实体自动拥有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
相关产品推荐
相关产品推荐

