博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
探讨复杂linq之group by 和 join
阅读量:4577 次
发布时间:2019-06-08

本文共 1629 字,大约阅读时间需要 5 分钟。

  最近经常用到集合,而且是大量使用集合,要再以前在使用这么多的集合肯定让我直接疯掉了,不过还好,有LINQ。一下做通过我们项目中的实际需求引出几个我本人使用较为复杂linq(其实说复杂不是因为linq语句复杂,而是业务需求麻烦)。

  第一个Demo,像SQL一样使用group by.先贴代码(代码直接粘贴的有点难看):

var namequery = from b in                                    (from a in approvalNodeDTOs                                     group a by a.ApprovalNodeName into g                                     select new { nodeName = g.Key, count = g.Count() })                                where b.count > 1                                select b.nodeName;

  这里approvalNodeDTOs表示一个列表,这条语句的目的是获取这个列表当中具有相同ApprovalNodeName(即为集合里item的类属性)属性值的记录的ApprovalNodeName。这样子以来避免了我们去写多条语句,其实这种写法优势并不明显,不过算是各有所好吧,多一个解决方案也可以让我们在今后碰到问题时有多一条思路。

  第二个Demo,先来看看我通过这个linq语句获得的数据集的代码吧。

var queryTemp = from a in list                           where a.ID.Equals(appID)                            group a by a.USERID into g                            select new { g.Key, g };            var query = from u in users                        join q in queryTemp on u.I_USER_ID equals q.Key into temp                        from q in temp.DefaultIfEmpty()                        select new { UserName = u.C_NAME, g = q == null ? null : q.g };
  第一个Linq语句获取的queryTemp是以UserID进行分组获取集合,在这里解释下g.Key表示的就是这个UserID,Key是我们使用group by时都会有的一个属性,而后面的g就表示获取的分组后的所有属性。   第二个Linq语句使用了join,因为第一个语句所查询的list只是以Users表作为外键表,只关联到了userID,并没有Name,所以要进行连表查询。join后面紧跟的queryTemp相当于表示右连接,即只要queryTemp存在数据即返回布无论users是否有匹配数据。而DefaultIfEmpty方法,大家可参考MSDN()。   最后说一下第二个Demo的需求,很简单,就是连表查询,但是首先需要分组,最终就是把分组后的集合中UserID字段用Name字段来替代。   其实我这两个Demo一点也不复杂,最重要的就是针对逻辑需要理清思路。

转载于:https://www.cnblogs.com/FreeDong/archive/2012/08/07/2626256.html

你可能感兴趣的文章
转: 编码,charset,乱码,unicode,utf-8与net简单释义
查看>>
C#--正则匹配
查看>>
5.30 考试修改+总结
查看>>
BA-设计施工调试流程
查看>>
C#-CLR各版本特点
查看>>
css3背景透明文字不透明
查看>>
《java JDK7 学习笔记》之接口与多态
查看>>
LeetCode 96:Unique Binary Search Trees
查看>>
kernel-char设备的建立
查看>>
DVWA-CSRF
查看>>
ubuntu common software introduction
查看>>
资源相互引用时 需添加 PerformSubstitution=True
查看>>
MapRedece(单表关联)
查看>>
蒲公英App开发之检测新版本
查看>>
【安卓基础】倒计时按钮封装(验证码倒计时按钮)
查看>>
configparser模块
查看>>
SelectQueryBuilder的用法
查看>>
android的用户定位(一)
查看>>
creat-react-app搭建的项目中按需引入antd以及配置Less和如何修改antd的主题色
查看>>
IIS安装
查看>>