linq中order by 和group by (含lambda表達式實現)以及綜合案例


一、Linq應用場景

linq的語法通過System.Linq下面的Enumerable類提供支持,也就是說,只要是實現了IEnumerable<T>的對象都可以使用Linq的語法來查詢。LINQ定義了大約40個查詢操作符,如select、from、in、where、group by 以及order by,通過查看源代碼,實際上linq為IEnumerable<TSource>實現了一系列的擴展方法。

二、Linq中的關鍵字

今天這里主要討論order by 和group by的使用

1.linq order by(多列)

            var list=     from r in Transactions
                          where r.ZhiFuQuDao== "支付寶"
                          orderby r.HospitalID ,r.Moneys descending 
                          select r;

 

2.Lambda表達式 實現 order by(多列)

            var list =    Transactions.
                          OrderBy(r => r.HospitalID).
                          ThenBy(r => r.Type).
                          ThenByDescending(r => r.Moneys ). Take(10);

3.linq group by(多列)

 

1.簡單的實現方式:

 
         var list =  from T in Transactions
                     group T by T.ZhiFuQuDao into g
                     select g; 

 

語句描述:Linq使用Group By 統計交易流水的支付渠道方式(支付寶或微信等等)。

說明:這里將查詢結果 命名為g,一旦重新命名,T 的作用域就結束了,所以,最后select時,只能select g。

 

2.分類統計各個分類的最大值(Max)、最小值(Min)、平均值(Average)和求和(Sum)

 

               var q =  from T in Transactions
                        group T by T.ZhiFuQuDao into g  
                        select new {  
                                   g.Key,  
                                  MaxPrice = g.Max(T => T.Moneys)  
                            }; 

 


語句描述:Linq使用Group By和Max查找交易流水每種支付渠道的最高金額的一筆交易。

說明:先按ZhiFuQuDao進行分類,然后獲取每個分類的最高一筆交易金額賦給MaxPrice。最小值、平均值和求和實現和此類似,替換關鍵之即可

 

3.多列(Multiple Columns)

 

     var dateQDList =   from T in hisDZD  
                        group T by new  
                        {  
                         T.JiaoYiRQ,  
                         T.JiaoYiQDMC
                        }   into g  
                        select new  
                        {  
                         g.Key.JiaoYiRQ,  
                         g.Key.JiaoYiQDMC  
                        }; 
  
 

語句描述:Linq使用Group By按交易日期和交易渠名稱將his對賬單進行分組統計。

效果圖如下

 

4. lambda group by(多列帶表達式)

var dateQDList = hisDZD.GroupBy(t => new 
{
JiaoYiRQ=Convert.ToDateTime(t.JiaoYiRQ).ToString("yyyy-MM-dd"),
t.JiaoYiQDMC
}) .Select(g
=>new {
JiaoYiRQ = Convert.ToDateTime(g.Key.JiaoYiRQ).ToString("yyyy-MM-dd"),
JiaoYiQDMC = g.Key.JiaoYiQDMC
}).ToList();

語句描述:Linq使用Group By按交易日期和交易渠名稱將his對賬單進行分組統計。

效果:同上

說了這么多不知道大家有沒有理解和使用呢

最后留兩道題給大家,看大家是否能學以致用

1:給“cdabe” 排序;

2:給"ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB"將含有相同字母的進行分組並排序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM