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

时间:2015-11-15 15:55:23

标签: json entity-framework linq linq-to-entities

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

我有两个实体Class AND St​​udent

enter image description here

我希望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"
      }
    ]
  }
]

enter image description here

当我试图操纵类数据中的学生数据时,我遇到了问题。

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

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;
}

2 个答案:

答案 0 :(得分:1)

你只需要

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

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

P.S。你应该提到你的问题中的错误和堆栈跟踪。

<强>更新

如果相关(在域语义)表中没有关系,您可以使用JOIN。 由于你有一对多的关系,这可以提供帮助:

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

此处classes是匿名类型的对象列表,其中包含Class对象并与他Students相关。

答案 1 :(得分:1)

我现在无法测试,但您可以像以下一样加入他们:

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
           })
        });