Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从实体框架核心构建的多对多关系中获取数据?_C#_Asp.net Core_Entity Framework Core_Many To Many - Fatal编程技术网

C# 如何从实体框架核心构建的多对多关系中获取数据?

C# 如何从实体框架核心构建的多对多关系中获取数据?,c#,asp.net-core,entity-framework-core,many-to-many,C#,Asp.net Core,Entity Framework Core,Many To Many,我和你建立了多对多的关系 公共班级学生 { 公共int StudentId{get;set;} 公共字符串名称{get;set;} 公共IList学生课程{get;set;} } 公共课 { public int CourseId{get;set;} 公共字符串CourseName{get;set;} 公共字符串说明{get;set;} 公共IList学生课程{get;set;} } 公共课学生课程 { 公共int StudentId{get;set;} 公立学生学生{get;set;} pub

我和你建立了多对多的关系

公共班级学生
{
公共int StudentId{get;set;}
公共字符串名称{get;set;}
公共IList学生课程{get;set;}
}
公共课
{
public int CourseId{get;set;}
公共字符串CourseName{get;set;}
公共字符串说明{get;set;}
公共IList学生课程{get;set;}
}
公共课学生课程
{
公共int StudentId{get;set;}
公立学生学生{get;set;}
public int CourseId{get;set;}
公共课程{get;set;}
}
如何按学生ID列出课程列表

如何将其转换为IQueryable(需要asp.net)


谢谢。

如果你只想得到一个学生正在学习的所有课程,有多种方法可以做到这一点。 我猜您的数据库上下文中有一个
DbSet StudentCourses
条目。 您只需调用
context.StudentCourses.Include(x=>x.Student).Where(entry=>entry.CourseId==theIdYouWant).选择(entry=>entry.Student)


请注意
.Include()
,它告诉实体框架将学生表与StudentCourse表“连接”,这样您就可以得到实际的学生实体,而不仅仅是ID(如果您不包含Include,则student属性很可能被设置为null)

如果你只想得到一个学生正在学习的所有课程,有多种方法可以做到这一点。 我猜您的数据库上下文中有一个
DbSet StudentCourses
条目。 您只需调用
context.StudentCourses.Include(x=>x.Student).Where(entry=>entry.CourseId==theIdYouWant).选择(entry=>entry.Student)


请注意
.Include()
,它告诉Entity Framework将student表与StudentCourse表“连接”,这样您就可以得到实际的学生实体,而不仅仅是ID(如果您不包含Include,很可能student属性只会设置为null)

不需要
Include
,甚至可以忽略它。如果显式选择,为什么
Student
会为空?我现在有一种事实检查的方法,但在我使用的ef core版本中它就是这样工作的是的,它工作,但不是必需的。在发布答案之前,最好先测试一下这些东西。确定性软件中没有“可能”这样的东西。它是,还是不是。仍然有人认为它增加了明确的必要性与否,但这取决于个人偏好。我会尝试在以后的回答中添加更多细节,但这是凌晨1点写的。我不同意。不添加操作代码只会导致混淆。它助长了一种广泛传播的误解,即
包括
是使预测有效的必要条件。为了清晰起见,
Select(entry=>entry.Student)
足够清晰,尤其是因为它是决定输出的唯一部分。不需要包含,甚至可以忽略它。如果显式选择,为什么
Student
会为空?我现在有一种事实检查的方法,但在我使用的ef core版本中它就是这样工作的是的,它工作,但不是必需的。在发布答案之前,最好先测试一下这些东西。确定性软件中没有“可能”这样的东西。它是,还是不是。仍然有人认为它增加了明确的必要性与否,但这取决于个人偏好。我会尝试在以后的回答中添加更多细节,但这是凌晨1点写的。我不同意。不添加操作代码只会导致混淆。它助长了一种广泛传播的误解,即
包括
是使预测有效的必要条件。为了清晰起见,
Select(entry=>entry.Student)
足够清晰,尤其是因为它是决定输出的唯一部分。
public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }

    public IList<StudentCourse> StudentCourses { get; set; }
}

public class Course
{
    public int CourseId { get; set; }
    public string CourseName { get; set; }
    public string Description { get; set; }

    public IList<StudentCourse> StudentCourses { get; set; }
}

public class StudentCourse
{
    public int StudentId { get; set; }
    public Student Student { get; set; }

    public int CourseId { get; set; }
    public Course Course { get; set; }
}