C# 合并两个不同类型集合数据
C# 合并两个不同类型集合数据
2019-09-30 10:28:46 Dear200892 阅读数 9 文章标签: C#Lambda合并不同类型集合数据 更多
分类专栏: C#
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Dear200892/article/details/101756354
先把两个不同的类数据摆上。
-
public class User
-
{
-
/// <summary>
-
/// 用户编号
-
/// </summary>
-
public int User_Id { get; set; }
-
/// <summary>
-
/// 区域编号
-
/// </summary>
-
public int Area_Id { get; set; }
-
/// <summary>
-
/// 用户名
-
/// </summary>
-
public string User_Name { get; set; }
-
}
-
public class Area
-
{
-
/// <summary>
-
/// 区域编号
-
/// </summary>
-
public int Area_Id { get; set; }
-
/// <summary>
-
/// 区域名
-
/// </summary>
-
public string Area_Name { get; set; }
-
}
-
List<User> userList = new List<User>();
-
userList.Add(new User { User_Id = 1, Area_Id = 1, User_Name = "张三" });
-
userList.Add(new User { User_Id = 2, Area_Id = 2, User_Name = "李四" });
-
userList.Add(new User { User_Id = 3, Area_Id = 1, User_Name = "王五" });
-
userList.Add(new User { User_Id = 4, Area_Id = 9, User_Name = "赵四" });
-
List<Area> areaList = new List<Area>();
-
areaList.Add(new Area { Area_Id = 1, Area_Name = "广州市" });
-
areaList.Add(new Area { Area_Id = 2, Area_Name = "汕头市" });
-
areaList.Add(new Area { Area_Id = 3, Area_Name = "佛山市" });
-
areaList.Add(new Area { Area_Id = 4, Area_Name = "深圳市" });
-
areaList.Add(new Area { Area_Id = 5, Area_Name = "珠海市" });
-
areaList.Add(new Area { Area_Id = 7, Area_Name = "韶关市" });
两个集合类型的数据都已添加完毕,现在我想实现一个这样的功能 :
外连接:
我想查询每个用户所对应的的城市名
要想使用lambda来解决这个问题,就需要使用到GroupJoin
GroupJoin可以将两个不同类型的数据进行关联,同时分组,类似于SQL中的外连接。
-
var resultList = userList.GroupJoin(areaList, u => u.Area_Id, a => a.Area_Id, (u, a) => new {
-
Area_Id = u.Area_Id,
-
User_Name = u.User_Name,
-
Area_Name = a.FirstOrDefault(x => x.Area_Id == u.Area_Id)==null?"Null": a.FirstOrDefault(x => x.Area_Id == u.Area_Id).Area_Name
-
}).Select(o => o).ToList();
因为上面有个用户的Area_Id=9,在集合中并没有出现这个城市,所以需要判断是否为空,不然会出现异常。
如果你不想筛选列,那就可以改成(u,a) => new { u, a }。
外连接
内连接:
现在我想查询有对应城市的用户,也就是赵四不出现结果中。
那就需要将GroupJoin改为Join!
Join可以将两个不同类型的数据进行关联,不分组,类似于SQL中的内连接。
-
var result = userList.Join(areaList, u => u.Area_Id, a => a.Area_Id, (u, a) => new {
-
Area_Id = u.Area_Id,
-
User_Name = u.User_Name,
-
Area_Name = a.Area_Name
-
}).Select(o => o).ToList();
t同样你不想筛选列,那就可以改成(u,a) => new { u, a }。