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}}FilteredInclude
是一个反复出现的问题。这是不可能的。至于你最后的努力,试试student.student.Firstname
。您正在循环上一条语句中的匿名类型。筛选的Include
是一个重复出现的问题。这是不可能的。至于你最后的努力,试试student.student.Firstname
。您正在循环使用上一条语句中的匿名类型。