我一直在试图找出如何将以下LINQ查询语法转换为方法语法,但我只是不明白:
from exa in _context.Exams
from stu in exa.Class.Students
where exa.Id == 1
select new StudentFullName
{
Id = stu.Id,
FullName = stu.Person.FirstName + " " + stu.Person.LastName
}
表Classes
中的属性ICollection<Student> Students
与Students
的多对多关系引起了我的困惑。
我试过了:
_context.Exams
.Where(exa => exa.Id == id)
.Select(exa => new StudentFullName
{
Id = exa.Class.Students.Select(stu => stu.Id),
FullNamee = exa.Class.Students.Select(stu => stu.Person.FirstName + " " + stu.Person.LastName)
}).ToList();
但是我不能创建类StudentFullName
,因为查询返回IEnumerable<int>
而不是每个属性的int
。
这就是我得到的:https://i.stack.imgur.com/7fcxx.jpg
这就是我应该得到的:https://i.stack.imgur.com/oy0hT.jpg
编辑:从tymtam调整解决方案,它工作
_context.Exams
.Where(exa => exa.Id == id)
.SelectMany(exa => exa.Class.Students
.Select(stu => new StudentFullNameViewModel
{
Id = stu.Id,
FullName = stu.Person.FirstName + " " + stu.Person.LastName
})
).ToList()
很可疑
- 学生和考试之间没有连接
exa
未用于结果对象
我认为1对1的翻译是:
var students2 = exams
.Where(exa => exa.Id == id)
.SelectMany(exa => exa.Class.Students
.Select(stu => new StudentFullName
{
Id = stu.Id,
FullNamee = stu.Person.FirstName + " " + stu.Person.LastName
}))
.ToList();