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(多列)
varlist= 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 gselect 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"將含有相同字母的進行分組並排序。