C# LINQ:如何介绍包含在何处?

C# LINQ:如何介绍包含在何处?,c#,linq,C#,Linq,我用这个查询来获取学生,我还想包括学生正在学习的当前课程。如何更改此查询以使其正常工作 var students = Context.Students .Where(x=>x.Race == "SomeRace") .Include(x=> x.StudentCourse.FirstOrDefault(x=>x.Status == CourseStatus.Current)) 由于EF不允

我用这个查询来获取学生,我还想包括学生正在学习的当前课程。如何更改此查询以使其正常工作

var students = Context.Students
                      .Where(x=>x.Race == "SomeRace")
                      .Include(x=> x.StudentCourse.FirstOrDefault(x=>x.Status == CourseStatus.Current))
由于EF不允许将where条件放入Include中,因此此查询将通过一个错误完成。有转机吗?还有其他方法写这个查询吗

更新: 如果我使用@CoryNelson提出的解决方案,如下所示:

studentResult = Context.Students
.Where(x=>x.Race == "SomeRace")
.Select(x=>new
{
    Student = x,
    CurrentCourse = x.StudentCourse
        .FirstOrDefault(y=>y.Status == CourseStatus.Current)
};
我得到的研究结果不是一个列表,就像我试图做的那样

foreach( student in studentResult) 
{ 
   finalResult.Add( 
   new StudentDto
  { 
      FirstName = student.Firstname // I do not get student first name, intellisense is not letting me select FirstName, which means studentResult is not a collection? 
   } 
} 

Include
引入全部或全部导航属性。您可能希望改用投影:

Context.Students
    .Where(x=>x.Race == "SomeRace")
    .Select(x=>new
    {
        Student = x,
        CurrentCourse = x.StudentCourse
            .FirstOrDefault(y=>y.Status == CourseStatus.Current)
    };

Include
引入全部或全部导航属性。您可能希望改用投影:

Context.Students
    .Where(x=>x.Race == "SomeRace")
    .Select(x=>new
    {
        Student = x,
        CurrentCourse = x.StudentCourse
            .FirstOrDefault(y=>y.Status == CourseStatus.Current)
    };

您使用的
Include
错误
Include
用于强制加载连接到要带回的实体的实体。查看有关
包括的更多信息

您尝试执行的操作应该与其他选择器条件一起出现在where语句中

已更新

然后您确实希望使用Cory Nelson的LINQ查询

var students = Context.Students
                      .Where(x => x.Race == "SomeRace")
                      .Select(x => new
                      {
                          Student = x,
                          CurrentCouse = x.StudentCourse.FirstOrDefault(y => y.Status == CourseStatus.Current)
                      });
然后,为了访问它们,您可以执行以下操作:

foreach(var s in students)
{
    finalResult.Add(new StudentDto { FirstName = s.Student.Firstname } );
}

Select
中使用
new
会创建一个。说
Student=x
就是说匿名类型有一个名为Student的字段,该字段将包含
Student
类的原始变量
x
的字段。本文提供了有关匿名类型的更多详细信息,但这是访问字段所需的全部内容。

您使用的
包括
错误
Include
用于强制加载连接到要带回的实体的实体。查看有关
包括的更多信息

您尝试执行的操作应该与其他选择器条件一起出现在where语句中

已更新

然后您确实希望使用Cory Nelson的LINQ查询

var students = Context.Students
                      .Where(x => x.Race == "SomeRace")
                      .Select(x => new
                      {
                          Student = x,
                          CurrentCouse = x.StudentCourse.FirstOrDefault(y => y.Status == CourseStatus.Current)
                      });
然后,为了访问它们,您可以执行以下操作:

foreach(var s in students)
{
    finalResult.Add(new StudentDto { FirstName = s.Student.Firstname } );
}

Select
中使用
new
会创建一个。说
Student=x
就是说匿名类型有一个名为Student的字段,该字段将包含
Student
类的原始变量
x
的字段。这篇文章提供了有关匿名类型的更多详细信息,但这是访问这些字段所需的全部内容。

我不能使用这篇文章,我希望所有参与者都具有某种种族和当前路线。它可能会过滤结果,如果学生没有任何当前课程,则不会返回学生。@显然,在我更新任何内容之前,您希望所有学生都有“SomeRace”和任何当前课程吗?不是特定的当前课程,而是任何当前课程?理想情况下,只有一门学生课程是当前课程,因此我可以选择FirstOrDefault()是的,这就是问题所在,现在它的工作方式我不能使用它,我希望所有人都有一些种族和当前课程。它可能会过滤结果,如果学生没有任何当前课程,则不会返回学生。@显然,在我更新任何内容之前,您希望所有学生都有“SomeRace”和任何当前课程吗?不是特定的当前课程,而是任何当前课程?理想情况下,只有一门学生课程是当前课程,因此我可以选择FirstOrDefault()是的,这就是问题所在,现在它的工作原理应该是可行的,但当我这样做并尝试填充结果(应该是集合)时,我没有智能感。为什么会这样?foreach(结果中的学生){new StudentDto{FirstName=student.FirstName//I don't get student,intellisense不允许我选择FirstName}}这应该行得通,但当我这样做并尝试填充结果(应该是集合)时,我没有得到intellesense。为什么?foreach(结果中的学生){new StudentDto{FirstName=student.FirstName//I don't get student,intellisense不允许我选择FirstName}}Filtered
Include
是一个反复出现的问题。这是不可能的。至于你最后的努力,试试
student.student.Firstname
。您正在循环上一条语句中的匿名类型。筛选的
Include
是一个重复出现的问题。这是不可能的。至于你最后的努力,试试
student.student.Firstname
。您正在循环使用上一条语句中的匿名类型。