我希望有人能解释一下在使用LINQ时,术语"into"的含义。通常情况下,我试图理解如何在C#中进行INNER JOIN、LEFT OUTER JOIN等操作。
我有一个名为"学生"的主表,其中存储了一些外键ID,当运行查询时,这些ID将被替换为它们的名称。这些名称是从查找表(如Marks、SoftwareVersions、Departments等)中读取的。所有字段都是必需的,但MarkID除外。我尝试在LINQ中构建的查询如下:
我有一个名为"学生"的主表,其中存储了一些外键ID,当运行查询时,这些ID将被替换为它们的名称。这些名称是从查找表(如Marks、SoftwareVersions、Departments等)中读取的。所有字段都是必需的,但MarkID除外。我尝试在LINQ中构建的查询如下:
SELECT * FROM dbo.Students
INNER JOIN dbo.Departments ON dbo.Students.DepartmentID=dbo.Departments.DepartmentID
INNER JOIN dbo.SoftwareVersions ON dbo.Students.SoftwareVersionID=dbo.SoftwareVersions.SoftwareVersionID
INNER JOIN dbo.Statuses ON dbo.Students.StatusID=dbo.Statuses.StatusID
LEFT JOIN dbo.Marks ON dbo.Students.MarkID=dbo.Marks.MarkID
WHERE dbo.Students.DepartmentID=17;
我通过阅读大量文章和观看一些视频,终于成功运行了下面的代码,但我感觉自己对代码还没有完全理解。让我困惑的部分在第5行以into
结尾,然后在接下来的一行以from m ...
开头。我不知道into
的作用是什么,也不知道from m ...
到底发生了什么。这是使用LINQ的代码:
var result = from st in dbContext.Students where st.DepartmentID == 17
join d in dbContext.Departments on st.DepartmentID equals d.DepartmentID
join sv in dbContext.SoftwareVersions on st.SoftwareVersionID equals sv.SoftwareVersionID
join stat in dbContext.Statuses on st.StatusID equals stat.StatusID
join m in dbContext.Marks on st.MarkID equals m.MarkID into marksGroup
from m in marksGroup.DefaultIfEmpty()
select new
{
student = st.StudentName,
department = p.DepartmentName,
software = sv.SoftwareVersionName,
status = st.StatusName,
marked = m != null ? m.MarkName : "-- Not marked --"
};