C#|C# Linq 左外联
【C#|C# Linq 左外联】C# Linq 左外联
假设我们有一个Student类,具有姓名、年龄、班级Id三个属性
还有一个Class类,具有Id,班级名两个属性
现要查找学生姓名、年龄和其所在班级名,因此需要做一个Student表左联Class表的操作
方式一:
var results = from s in students
join c in classes on s.ClassId equals c.Id into scs
from sc in scs.DefaultIfEmpty()
select new {
Name = s.Name, Age = s.Age, ClassName = sc?.ClassName ?? string.Empty };
方式二:
var results = students.GroupJoin(classes,
s => s.ClassId,
c => c.Id,
(s, cs) => new
{Name = s.Name,
Age = s.Age,
ClassName = cs.ElementAtOrDefault(0) is null ? string.Empty : cs.ElementAt(0).ClassName
});
完整代码演示:
using System;
using System.Collections.Generic;
using System.Linq;
public class Student
{public string Name {
get;
set;
}
public int Age {
get;
set;
}
public int ClassId {
get;
set;
}
}public class Class
{public int Id {
get;
set;
}
public string ClassName {
get;
set;
}
}public class Program
{public static void Main()
{List> students = new List>()
{new Student(){
Name = "B", Age = 18, ClassId = 1},
new Student(){
Name = "C", Age = 19, ClassId = 2},
new Student(){
Name = "A", Age = 20, ClassId = 3},
new Student(){
Name = "D", Age = 20, ClassId = 4},
new Student(){
Name = "E", Age = 20, ClassId = 5},
};
List classes = new List()
{new Class(){
Id = 1, ClassName = "1班"},
new Class(){
Id = 2, ClassName = "2班"},
new Class(){
Id = 3, ClassName = "3班"},
};
//方式一:
//var results = from s in students
//join c in classes on s.ClassId equals c.Id into scs
//from sc in scs.DefaultIfEmpty()
//select new { Name = s.Name, Age = s.Age, ClassName = sc?.ClassName ?? string.Empty };
//方式二:
var results = students.GroupJoin(classes,
s => s.ClassId,
c => c.Id,
(s, cs) => new
{Name = s.Name,
Age = s.Age,
ClassName = cs.ElementAtOrDefault(0) is null ? string.Empty : cs.ElementAt(0).ClassName
});
foreach (var result in results)
{Console.WriteLine($"{
result.Name} {
result.Age} {
result.ClassName}");
}
}
}
推荐阅读
- 两三老友|两三老友 足矣
- 摩天轮与海盗船
- 突尼斯第一天故事
- 戛纳电影节--中国原创《日出东方》艺术家左锋义现场泼墨炫彩世界
- 左边怪人
- (IOS)为UIView某个角添加圆角
- 一粒灰尘打败我
- 一毕业就年薪200万的左鹏飞
- 别让旁人左右了自己的心情
- 雷微静(青春向左,生活向右)