首页 > 解决方案 > SQLKata 使用 Include/IncludeMany 返回复杂对象

问题描述

我需要从查询中返回每个学生都有作业的学生列表。

class Student {
  public string Name{ get; set; }
  public IEnumerable<Assignment> Assignments{ get; set; }
}

class Assignment { 
  public string Title { get; set; } 
}

所以尝试创建两个查询,然后使用 include/includemany 但我得到其他错误(给定的键 'Id' 不在字典中)

var students = db.Query('Student')
    .Select(...)
    .Where()

var assignments= db.Query('Assignment')
    .Select(...)
    .Where()

var result = students.IncludeMany('Assignments', assignments).Get()

但这不起作用。如何使用 SQLKata 正确创建复杂/嵌套对象?

标签: sql-server.net-coresqlkata

解决方案


我假设您的示例已完成,但您应该在查询中添加主键和外键属性。(它们不在您的课程中,所以我根据 sql kata 使用的约定添加了它们)

var students = db.Query("Student")
    .Select("Id", "Name");

var assignments = db.Query("Assignment")
    .Select("StudentId", "Title");

var result = students
    .IncludeMany("Assignments", assignments)
    .Get();

如果它们没有被指定为 IncludeMany 方法的参数,SqlKata 将使用“Id”字段作为关系中的主键和“StudentId”字段作为关系中的外键。您可以将这些作为额外参数添加到 IncludeMany 方法。

var result = students
    .IncludeMany("Assignments", assignments, "StudentId", "Id")
    .Get();

请注意,此时 SqlKata 似乎不支持通用方法 Get<> GetAsync<> 上的这一点。


推荐阅读