如何使用 Include 来包含与另一个实体无关的实体

How to use Include to include an Entity not related to another entity

我想通过构建嵌套的 json 对象来使用 WEB API。

我有两个实体 Class 和学生

我希望 JSON 输出看起来像这样的结构

[
  {
    "ClassId": 1,
    "ClassName": "Class A",
    "Students": [
      {
        "StudentId": 1,
        "StudentName": "student 1"
      },
      {
        "StudentId": 2,
        "StudentName": "student 2"
      }
    ]
  },
    {
    "ClassId": 2,
    "ClassName": "Class B",
    "Students": [
      {
        "StudentId": 3,
        "StudentName": "student 3"
      },
      {
        "StudentId": 4,
        "StudentName": "student 4"
      }
    ]
  }
]

我在尝试操作 class 数据中的学生数据时遇到问题。

我正在尝试这段代码,但它给了我一个错误。

public IQueryable<tbl_mosque> Gettbl_mosque()
{
    var Classes = db
        .Class
        .Include("Students")
        .Select(t => new Class
        {
            id = t.Id,
            name = t.Name,
            student = t.students.Select(p => new student
            {
                Id = p.id,
                Name = p.Name
            })
        }).ToList();

    return Classes;
}

你只需要

return db.Class.Include("Students").ToList();

Include 表示引擎应包含 Students 实现。

P.S。您应该在问题中提及错误和堆栈跟踪。

更新

如果相关(在域语义中)之间没有关系table,您可以使用 JOIN。 由于您有一对多关系,这可以帮助:

var classes = db.Classes.GroupJoin(db.Students, c => c.Id, s => s.ClassID,
                                             (c, s) => new {Class = c, Students = s});

这里classes是一个匿名类型的对象列表,由Class对象组成并与他Students相关联

我现在无法测试,但您可以按照以下方式加入他们:

var joined = classesList.Join(studentsList, 
        _class => _class.Id, _student => _student.ClassId, 
        (_class, _student) => new Class
        {
           id = _class.Id,
           name = _class.Name,
           student = new student
           {
              Id = _student.id,
              Name = _student.Name
           })
        });