【发布时间】:2020-02-17 22:34:51
【问题描述】:
我是 LINQ 和 Lambda 的新手。我想查询那一年正在学习的每个 studyYear (1,2,3) 学生。我已经在没有 Lambda 的情况下完成了,但我真的很想知道如何使用 lambda。
var res = from s in db.student
join u in db.EnrolledYear
on s.ID equals u.studentID
join g in db.studyYear
on u.studyYearID equals g.ID
select new
{
Year = g.year,
StudentFName = s.FirstName
StudentLName = s.LastName
};
我查看了其他使用 lambda 的示例,但我并没有真正理解。 我所管理的是在学生和入学年份之间建立内部联系。现在我不明白如何完成入学年和学习年之间的内部连接。 我卡在这里,我需要再加入一个:
var res = db.EnrolledYear.Join(db.student,
u => u.studentID, s => s.ID,
(enroll, student) => new
{
Godina = enroll.year,
FName = student.FirstName
LName = student.LastName
})
.Join(.....?)
【问题讨论】:
-
只是好奇:您是否有一个有效的 SQL 查询可以得到您想要的结果?当尝试在 LINQ 中编写复杂查询时,我发现使用经过验证的 SQL 查询很有用。
-
是的,我有。但是我之前没有在多个表上用lambda做LINQ,只是试着通过一些例子来理解,现在我想学习和使用它
-
除非这纯粹是科学兴趣(看看 3 个表连接是如何工作的),否则我不会将您的数据库模型破坏为 3 个表。准确地说,StudyYear 表根本没有意义;它有一列“year”,可能与该表的 ID 大小相同。好吧,ID 最终可能会更大(无法想象一年会超过 10000,而 ID==count of all-time student);在存储优化方面毫无意义。此信息的正确位置应在 EnrolledYear 表内;看:en.wikipedia.org/wiki/Denormalization
标签: c# asp.net linq join lambda