c 中查詢表示式GroupBy的使用方法

2022-09-25 10:18:12 字數 1483 閱讀 4281

c#中實現ienumerable介面的類提供了很多擴充套件方法,其中select,where等為最常見的,且幾乎和sql語法類似比較好理解,基本滿足了日常處理集合的大部分需求,然而還有一部分稍有不一樣理解起來比較拗,實際分析一下實現的原理倒也很好理解,本篇文章介紹一下groupby的使用方法。

student類:

public class student

public string classname

public string studentname

}設定資料如下:

list studentlist = new list

,new student ,

new student ,

new student ,

new student ,

new student ,

};我們假設兩個班裡的學生總共有六名,現在根據班級分組

ienumerable> studentgroup = studentlist.groupby(s => s.classname);

如**,呼叫groupby擴充套件方法後,返回型別為ienumerable>, ienumerable代表了返回結果可被foreach遍歷,其中泛型實現為igrouping,按照普遍理解的分組的概念,可以推斷igrouping中應該是string代表的是乙個key,即classname,那麼key對應的應該就是乙個student的集合,但是**應該怎樣實現呢?

可以首先foreach一下studentgroup

foreach 程式設計客棧(igrouping item in studentgroup)

這時候可以item.一下看看提示資訊

這時候發現,只能提示出來的屬性只有乙個key,那麼怎樣通過item獲取到分組後的student集合呢?這時候發現第二個getenumerator()方法,這個說明了item是可以被foreach的,型別為ienumerator,說明了可被遍歷的型別為student

然後可以foreach下item試一試

如果所示,果然是student,根據推斷,現在在foreach中遍歷所有資料,然後打出來看一下

fwww.cppcns.comoreach (igrouping item in studentgroup)

}執行結果如下:

所以可以斷定item是乙個student的集合,那麼為什麼item還有個key屬性呢,好像是和平常的集合不太一樣,事實確實是不一樣的,我們看下igrouping的定義如下:

public inte***ce igrouping : ienumerable, ienumerable

}igrouping的key是作為自己的屬性來儲存了,telement則實現了ienumerable,所以呼叫foreach遍歷igrouping的時候返回的即是student的集合了

這個探索是挺有趣的,通過神器vs的智慧型提示和原始碼的實現最終知道了groupby的用法,並且了解了為什麼這樣用。

同時也看出了通過介面可以巧妙的實現多型,其中自然是妙趣無窮!

報錯 不是GROUP BY 表示式

oracle庫中 group by後面必須加上你select後面所查詢的所有除聚合函式之外的所有字段。解決方法 將group by放入子查詢中使用或者將select後面的所有查詢字段放入group by 後。報錯 不是group by 表示式 例項 select sum hwjz rq from j...

INSERT 報 不是Group by 表示式

今天在插入資料時,發下如下sql 死活報錯 insert into test select psnid,sum f1 from psn inner join select max year lastyear,psnid from wagedata t group by psnid tmp on ps...

C 中的表示式

表示式是在運算元和運算子的基礎上構造而成。表示式的運算子指明了向運算元應用的運算。運算子的示例包括 和new。運算元的示例包括文字 字段 區域性變數和表示式。如果表示式包含多個運算子,那麼是運算子的優先順序決定了各個運算子的計算順序。例如,表示式 x y z相當於計算x y z 因為 運算子的優先順...