1. 程式人生 > >linq中order by 和group by (含lambda表示式實現)以及綜合案例

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"將含有相同字母的進行分組並排序。