【发布时间】:2014-11-21 10:18:06
【问题描述】:
如果有人能在使用 LINQ 时解释术语 into 的含义,我将不胜感激。一般来说,我想了解如何在 C# 中制作 INNER JOIN、LEFT OUTER JOIN 等。
我有一个主表Students,它存储了一些外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 --"
};
【问题讨论】:
-
请在每个帖子中坚持一个问题。这两个问题涉及与 EF 合作的完全不同的方面。对于第一个问题,请参见:stackoverflow.com/a/15599143/861716
-
关于内连接和左外连接的一些信息我推荐youtube.com/watch?v=Te2o5qakvZkyoutube.com/watch?v=5K8jwrlKV8E
-
您好,感谢 cmets。我将编辑这个问题并询问不同问题中的异常。