linq中order by 和group by (含lambda表达式实现)以及综合案例
2022-02-10 09:02 杨新华 阅读(313) 评论(0) 收藏 举报Linq应用场景
linq的语法通过System.Linq下面的Enumerable类提供支持,也就是说,只要是实现了IEnumerable<T>的对象都可以使用Linq的语法来查询。LINQ定义了大约40个查询操作符,如select、from、in、where、group by 以及order by,通过查看源代码,实际上linq为IEnumerable<TSource>实现了一系列的扩展方法。
Linq实际应用示例
//// 按设备分组 //var mainTemp = tempResults.GroupBy(p => new { p.OEMDeviceID }) // .Select(p => new { name = p.Key, count = p.Count() }); //// 按设备、时长分组 //var detailTemp = tempResults.GroupBy(p => new { p.OEMDeviceID, p.Duration }) // .Select(p => new { name = p.Key, count = p.Count() }).ToList // 按设备分组 var devGroups = from T in tempResults group T by new { T.OEMDeviceID } into g select new { g.Key.OEMDeviceID, count = g.Count() }; // 按设备、时长分组 var devDurationGroup = from T in tempResults group T by new { T.OEMDeviceID, T.Duration } into g select new { g.Key.OEMDeviceID, g.Key.Duration, count = g.Count() };
二、Linq中的关键字
今天这里主要讨论order by 和group by的使用
1.linq order by(多列)
2.Lambda表达式 实现 order by(多列)
3.linq group by(多列)
1.简单的实现方式:
语句描述:Linq使用Group By 统计交易流水的支付渠道方式(支付宝或微信等等)。
说明:这里将查询结果 命名为g,一旦重新命名,T 的作用域就结束了,所以,最后select时,只能select g。
2.分类统计各个分类的最大值(Max)、最小值(Min)、平均值(Average)和求和(Sum)
语句描述:Linq使用Group By和Max查找交易流水每种支付渠道的最高金额的一笔交易。
说明:先按ZhiFuQuDao进行分类,然后获取每个分类的最高一笔交易金额赋给MaxPrice。最小值、平均值和求和实现和此类似,替换关键之即可
3.多列(Multiple Columns)
语句描述:Linq使用Group By按交易日期和交易渠名称将his对账单进行分组统计。
效果图如下:
4. lambda group by(多列带表达式)
语句描述:Linq使用Group By按交易日期和交易渠名称将his对账单进行分组统计。
效果:同上
说了这么多不知道大家有没有理解和使用呢
最后留两道题给大家,看大家是否能学以致用
1:给“cdabe” 排序;
2:给"ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB"将含有相同字母的进行分组并排序。
//// 按设备分组 //var mainTemp = tempResults.GroupBy(p => new { p.OEMDeviceID }) // .Select(p => new { name = p.Key, count = p.Count() }); //// 按设备、时长分组 //var detailTemp = tempResults.GroupBy(p => new { p.OEMDeviceID, p.Duration }) // .Select(p => new { name = p.Key, count = p.Count() }).ToList // 按设备分组 var devGroups = from T in tempResults group T by new { T.OEMDeviceID } into g select new { g.Key.OEMDeviceID, count = g.Count() }; // 按设备、时长分组 var devDurationGroup = from T in tempResults group T by new { T.OEMDeviceID, T.Duration } into g select new { g.Key.OEMDeviceID, g.Key.Duration, count = g.Count() };
 
                    
                     
                    
                 
                    
                

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号