日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中IEnumerableT.GroupBy()的简单使用

發(fā)布時(shí)間:2025/3/11 C# 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中IEnumerableT.GroupBy()的简单使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景介紹

在實(shí)際項(xiàng)目中,對(duì)數(shù)據(jù)進(jìn)行GroupBy肯定是常用需求之一,特別是采用EF等ORM框架后隔絕了用SQL語句直接操作數(shù)據(jù),LINQ中的GroupBy肯定是要掌握的。

首先先對(duì)一個(gè)字段GroupBy,代碼如下:

static void Main(string[] args){List<Phone> PhoneLists = new List<Phone>(){new Phone { Country = "中國(guó)", City = "北京", Name = "小米" },new Phone { Country = "中國(guó)",City = "北京",Name = "華為"},new Phone { Country = "中國(guó)",City = "北京",Name = "聯(lián)想"},new Phone { Country = "中國(guó)",City = "臺(tái)北",Name = "魅族"},new Phone { Country = "日本",City = "東京",Name = "索尼"},new Phone { Country = "日本",City = "大阪",Name = "夏普"},new Phone { Country = "日本",City = "東京",Name = "松下"},new Phone { Country = "美國(guó)",City = "加州",Name = "蘋果"},new Phone { Country = "美國(guó)",City = "華盛頓",Name = "三星"},new Phone { Country = "美國(guó)",City = "華盛頓",Name = "HTC"}};var Lists = PhoneLists.GroupBy(p => p.Country);foreach (var list in Lists){Console.WriteLine(list.Key + ":");foreach (var lis in list){Console.WriteLine($"{lis.Country} - {lis.City} - {lis.Name}");}}Console.Read();}

運(yùn)行結(jié)果如下:

由于GroupBy支持的委托是Func<TSource,Tkey> ,返回值是IEnumerable<IGroup<Tkey,TSource>>類型,也就是我們可以自己指定任何想要的鍵,代碼如下:

static void Main(string[] args){ List<Phone> PhoneLists = new List<Phone>(){new Phone { Country = "中國(guó)", City = "北京", Name = "小米" },new Phone { Country = "中國(guó)",City = "北京",Name = "華為"},new Phone { Country = "中國(guó)",City = "北京",Name = "聯(lián)想"},new Phone { Country = "中國(guó)",City = "臺(tái)北",Name = "魅族"},new Phone { Country = "日本",City = "東京",Name = "索尼"},new Phone { Country = "日本",City = "大阪",Name = "夏普"},new Phone { Country = "日本",City = "東京",Name = "松下"},new Phone { Country = "美國(guó)",City = "加州",Name = "蘋果"},new Phone { Country = "美國(guó)",City = "華盛頓",Name = "三星"},new Phone { Country = "美國(guó)",City = "華盛頓",Name = "HTC"}};var Lists = PhoneLists.GroupBy(p => new GetGroupClass().GetGroup(p));foreach (var list in Lists){Console.WriteLine(list.Key + ":");foreach (var lis in list){Console.WriteLine($"{lis.Country} - {lis.City} - {lis.Name}");}}Console.Read();}public class GetGroupClass{public string GetGroup(Phone phone){string flag = string.Empty;if (phone.Country.Equals("中國(guó)") || phone.Country.Equals("日本")){flag = "亞洲";}else if (phone.Country.Equals("美國(guó)")){flag = "美洲";}return flag;}}

上述代碼中,增加GetGroupClass 這個(gè)類,里面的GetGroup方法支持根據(jù)洲來歸類,而非國(guó)家。運(yùn)行效果如下圖所示:

上述功能都是基于一個(gè)屬性GroupBy(),多個(gè)屬性GroupBy的代碼如下圖所示:

static void Main(string[] args){List<Phone> PhoneLists = new List<Phone>(){new Phone { Country = "中國(guó)", City = "北京", Name = "小米" },new Phone { Country = "中國(guó)",City = "北京",Name = "華為"},new Phone { Country = "中國(guó)",City = "北京",Name = "聯(lián)想"},new Phone { Country = "中國(guó)",City = "臺(tái)北",Name = "魅族"},new Phone { Country = "日本",City = "東京",Name = "索尼"},new Phone { Country = "日本",City = "大阪",Name = "夏普"},new Phone { Country = "日本",City = "東京",Name = "松下"},new Phone { Country = "美國(guó)",City = "加州",Name = "蘋果"},new Phone { Country = "美國(guó)",City = "華盛頓",Name = "三星"},new Phone { Country = "美國(guó)",City = "華盛頓",Name = "HTC"}};var Lists = PhoneLists.GroupBy(p => new { p.Country, p.City });foreach (var list in Lists){Console.WriteLine(list.Key + ":");foreach (var lis in list){Console.WriteLine($"{lis.Country} - {lis.City} - {lis.Name}");}}Console.Read();}

返回Lists的類型如下圖所示:

由此可以GroupBy可以將匿名類型作為Key,這讓我有所猜測(cè)GroupBy的原理是將返回類型中的屬性通過反射在源類型找到并作為Key來實(shí)現(xiàn)分組的,我很希望看到微軟的源代碼。運(yùn)行效果如下圖所示:

總結(jié)

以上是生活随笔為你收集整理的C#中IEnumerableT.GroupBy()的简单使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。