zoukankan      html  css  js  c++  java
  • LINQ学习笔记 Join 与 Group join

    LINQ中的Join对应T-SQL中的内连接,并无左连接的方法当然也没有右连接

    要达成Left join必须依靠GroupJoin来完成。

    GroupJoin顾名思义就是先集团在做加入,加入的不同处在于加入会得到一个一对一的新物件集合(List <T>),而GroupJoin则会得到一对多的物件集合({key,List < T>})。

    以下是join与GroupJoin的比较

     

     

     

     

    资料表如图:ID = 004无可对应的资料

     

    var _Join = SLIST.Join(ScoreList, o => o.ID, p => p.StudentID, (o, c) => new { o.Classroom, o.ID,o.Name, c.Class,c.score });
     

    ID=004 不會在結果集合中

    var _GroupJoin = SLIST.GroupJoin(ScoreList, o => o.ID, p => p.StudentID, (o, c) => new { o.Classroom, o.ID, c });
    // C只能以泛型物件的方式存入,不能列举属性

     

     

    物件Ç会比对关键值各自存入

     

    可以看GroupJoin可以得到与Left Join相似的结果

    接下来只要使用SelectMany将GroupJoin中的内容展开

    //将矩阵展开并输出Null得到left join资料集
     
    
    var _GroupJoinToLeftJoin = SLIST.GroupJoin(ScoreList, o => o.ID, p => p.StudentID, (o, c) => new { o.Classroom, o.ID,o.Name, c }).SelectMany(o => o.c.DefaultIfEmpty(), (o, c) => new { o.ID, o.Classroom,o.Name,Class=(c==null||c.Class==null?"N/A":c.Class), score= (c == null || c.score == null ? new Nullable<ushort>() : c.score) });
    // SelectMany展开矩阵的内容
    //使用DefaultIfEmpty因匿名型别无法输出NULL(无法转换成强型别),需特别注意Null的处理

     输出结果

     

     

     

  • 相关阅读:
    云架构师进阶攻略(1)
    针对云主机卡死问题的定位分析方法
    让App飞久一点
    OC静态代码检查实战
    PAT 1010. 一元多项式求导
    PAT 1009. 说反话
    PAT 1008 数组元素循环右移问题
    PAT 1007. 素数对猜想
    PAT 1006 换个格式输出整数
    PAT 1005 继续(3n+1)猜想
  • 原文地址:https://www.cnblogs.com/CnKker/p/10399117.html
Copyright © 2011-2022 走看看