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

别名:使用lambda表达式来实现Left Join


先把两个不同的类数据摆上。


 
  1. public class User

  2. {

  3. /// <summary>

  4. /// 用户编号

  5. /// </summary>

  6. public int User_Id { get; set; }

  7. /// <summary>

  8. /// 区域编号

  9. /// </summary>

  10. public int Area_Id { get; set; }

  11. /// <summary>

  12. /// 用户名

  13. /// </summary>

  14. public string User_Name { get; set; }

  15. }

  16. public class Area

  17. {

  18. /// <summary>

  19. /// 区域编号

  20. /// </summary>

  21. public int Area_Id { get; set; }

  22. /// <summary>

  23. /// 区域名

  24. /// </summary>

  25. public string Area_Name { get; set; }

  26. }


 
  1. List<User> userList = new List<User>();

  2. userList.Add(new User { User_Id = 1, Area_Id = 1, User_Name = "张三" });

  3. userList.Add(new User { User_Id = 2, Area_Id = 2, User_Name = "李四" });

  4. userList.Add(new User { User_Id = 3, Area_Id = 1, User_Name = "王五" });

  5. userList.Add(new User { User_Id = 4, Area_Id = 9, User_Name = "赵四" });

  6.  
  7. List<Area> areaList = new List<Area>();

  8. areaList.Add(new Area { Area_Id = 1, Area_Name = "广州市" });

  9. areaList.Add(new Area { Area_Id = 2, Area_Name = "汕头市" });

  10. areaList.Add(new Area { Area_Id = 3, Area_Name = "佛山市" });

  11. areaList.Add(new Area { Area_Id = 4, Area_Name = "深圳市" });

  12. areaList.Add(new Area { Area_Id = 5, Area_Name = "珠海市" });

  13. areaList.Add(new Area { Area_Id = 7, Area_Name = "韶关市" });


两个集合类型的数据都已添加完毕,现在我想实现一个这样的功能 :

外连接:

我想查询每个用户所对应的的城市名

要想使用lambda来解决这个问题,就需要使用到GroupJoin

GroupJoin可以将两个不同类型的数据进行关联,同时分组,类似于SQL中的外连接。


 
  1. var resultList = userList.GroupJoin(areaList, u => u.Area_Id, a => a.Area_Id, (u, a) => new {

  2. Area_Id = u.Area_Id,

  3. User_Name = u.User_Name,

  4. Area_Name = a.FirstOrDefault(x => x.Area_Id == u.Area_Id)==null?"Null": a.FirstOrDefault(x => x.Area_Id == u.Area_Id).Area_Name

  5. }).Select(o => o).ToList();

因为上面有个用户的Area_Id=9,在集合中并没有出现这个城市,所以需要判断是否为空,不然会出现异常。

如果你不想筛选列,那就可以改成(u,a) => new { u, a }。

外连接

外连接


 

内连接:

现在我想查询有对应城市的用户,也就是赵四不出现结果中。

那就需要将GroupJoin改为Join!

Join可以将两个不同类型的数据进行关联,不分组,类似于SQL中的内连接。


 
  1. var result = userList.Join(areaList, u => u.Area_Id, a => a.Area_Id, (u, a) => new {

  2. Area_Id = u.Area_Id,

  3. User_Name = u.User_Name,

  4. Area_Name = a.Area_Name

  5. }).Select(o => o).ToList();

t同样你不想筛选列,那就可以改成(u,a) => new { u, a }。 

内连接

posted @ 2019-10-11 14:58  grj001  阅读(214)  评论(0编辑  收藏  举报