zoukankan      html  css  js  c++  java
  • 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 }。 

    内连接

  • 相关阅读:
    EnrichPipeline文档
    454ITS数据按barcode和primer分类程序v1.0
    linux系统中,文件的三种特殊权限
    ITS简要分析流程(using Qiime)
    SegmentFault错误汇总
    PCoA主坐标分析
    PCA主成份分析
    软件测试工程师面试题
    我的测试团队管理之道
    如何管理好测试团队
  • 原文地址:https://www.cnblogs.com/grj001/p/12223791.html
Copyright © 2011-2022 走看看