內部聯接會忽略無對應內部元素的外部元素。左外部聯接保留所有外部元素,無對應時內部元素為預設值(參考型別為 null)。
var result = from student in DataSource.Students2
join score in DataSource.Scores on student.StudentID equals score.StudentID into Scores
from score in Scores.DefaultIfEmpty()
select new { student = student, score = score == default(Score) ? 0 : score.Value };
/* 結果:
{ student = Student ID:5, Name:Erik, score = 78 }
{ student = Student ID:6, Name:Frank, score = 0 }
*/
var result = DataSource.Students2.GroupJoin(
DataSource.Scores,
student => student.StudentID,
score => score.StudentID,
(student, Scores) => new { student = student, Scores = Scores })
.SelectMany(group => group.Scores.DefaultIfEmpty(),
(group, score) => new { student = group.student, score = (score == null) ? 0.0 : score.Value });
兩序列所有元素兩兩組合,常用於產生報表模板:
var result = from student in DataSource.Students
from course in DataSource.Courses
select new { StudentName = student.Name, CourseName = course.CourseName, ScoreValue = (double?)null };
// 等價方法語法
var result = DataSource.Students.SelectMany(
student => DataSource.Courses.Select(
course => new { StudentName = student.Name, CourseName = course.CourseName, ScoreValue = (double?)null }));