首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#包含,ThenInclude选择特定字段

C#包含,ThenInclude选择特定字段
EN

Stack Overflow用户
提问于 2022-09-19 02:45:55
回答 1查看 41关注 0票数 0

我有以下课程:

代码语言:javascript
复制
  public class Teacher
    {
        Guid ID;
        string Name;
        string Address;
        string Tel;
        ICollection<Student> Students;
    }

    public class Student
    {
        Guid id;
        string Name;
        string Address;
        string Tel;
        ICollection<Teacher> Teachers;
    }

由于这是一个多对多的关系,EF将创建一个连接表TeacherStudent.我想找到所有的老师和老师的学生名单(只有姓名),例如:

代码语言:javascript
复制
Teacher1 name:
  Student1 name,
  Student3 name,
  Student5 name,
  Student9 name

Teacher2 name:
  Student1 name,
  Student2 name,
  Student3 name,
  Student9 name

我试过:

_context.Teacher.Include(x=>x.TeacherStudent).ThenInclude(y=>y.Student);

这是工作和学生的信息是一个名单下的每一个老师。然而,我不想要所有的信息,我只想知道名字。我试过了SelectMany,但是它使数据变平了,并且我让老师的名字为每个学生重复。如何才能得到一个学生名字的名单,在老师的名字和不检索字段,我不需要

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 04:36:18

Include用于急切地加载相关实体。Select用于将实体查询投影到所需的数据结构中,或者以其他方式检索有关实体的信息片段。

这样你就可以得到一张老师和学生名字的清单:

代码语言:javascript
复制
var teachers = _context.Teacher
    .Select(t => new 
    {
        t.Id,
        t.Name,
        Students = t.Students.Select(s => new 
        {
            s.Id,
            s.Name
        }).ToList()
    }).ToList();

这将返回一个匿名类型,其中包含一个教师列表,只返回他们的ID和名称,以及一个带有学生ID和名称的学生匿名类型集合。

通常,在读取带有投影的数据时,读取is是个好主意,因为您通常希望使用这些信息来显示详细信息、删除或以其他方式更改条目。

如果我使用投影,这是否意味着EF在投影之前仍然会检索所有字段

投影构建一个SQL查询,仅提取填充所请求的数据结构所需的字段。它不加载实体,因此这在某种程度上是与Include相互排斥的。您不需要“包括”相关实体来使用投影。

在执行更新时,您通常会使用使用Include的热切加载。例如,如果要向教师添加或删除学生协会,则需要加载教师和相关学生,以确保更改跟踪了解您在从教师中添加或删除学生时所做的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73767903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档