最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年11月03日 11:26:51   作者:書蠡  
本篇文章介紹一下GroupBy的使用方法,包括實驗基礎(chǔ)數(shù)據(jù)用例,通過實例代碼給大家介紹的非常詳細,需要的朋友跟隨小編一起看看吧

說明:

c#中實現(xiàn)IEnumerable<T>接口的類提供了很多擴展方法,其中Select,Where等為最常見的,且?guī)缀鹾蚐ql語法類似比較好理解,基本滿足了日常處理集合的大部分需求,然而還有一部分稍有不一樣理解起來比較拗,實際分析一下實現(xiàn)的原理倒也很好理解,本篇文章介紹一下GroupBy的使用方法。

實驗基礎(chǔ)數(shù)據(jù)用例:

Student類:

public class Student
    {
        public int StuId { get; set; }

        public string ClassName { get; set; }

        public string StudentName { get; set; }
    }

設(shè)定數(shù)據(jù)如下:

List<Student> studentList = new List<Student>
            {
                new Student {ClassName = "軟工一班", StudentName = "康巴一", StuId = 1},
                new Student {ClassName = "軟工一班", StudentName = "康巴二", StuId = 2},
                new Student {ClassName = "軟工一班", StudentName = "康巴三", StuId = 3},
                new Student {ClassName = "軟工二班", StudentName = "康定一", StuId = 4},
                new Student {ClassName = "軟工二班", StudentName = "康定二", StuId = 5},
                new Student {ClassName = "軟工二班", StudentName = "康定三", StuId = 6},
            };

我們假設(shè)兩個班里的學(xué)生總共有六名,現(xiàn)在根據(jù)班級分組

IEnumerable<IGrouping<string, Student>> studentGroup = studentList.GroupBy(s => s.ClassName);

如代碼,調(diào)用GroupBy擴展方法后,返回類型為IEnumerable<IGrouping<string, Student>>, IEnumerable代表了返回結(jié)果可被foreach遍歷,其中泛型實現(xiàn)為IGrouping<string,Student>,按照普遍理解的分組的概念,可以推斷IGrouping中應(yīng)該是string代表的是一個key,即ClassName,那么key對應(yīng)的應(yīng)該就是一個Student的集合,但是代碼應(yīng)該怎樣實現(xiàn)呢?

可以首先foreach一下studentGroup

foreach (IGrouping<string, Student> item in studentGroup)
            {
                
            }

這時候可以item.一下看看提示信息

這時候發(fā)現(xiàn),只能提示出來的屬性只有一個key,那么怎樣通過item獲取到分組后的Student集合呢?這時候發(fā)現(xiàn)第二個GetEnumerator()方法,這個說明了item是可以被foreach的,類型為IEnumerator<Student>,說明了可被遍歷的類型為Student

然后可以foreach下item試一試

如果所示,果然是Student,根據(jù)推斷,現(xiàn)在在foreach中遍歷所有數(shù)據(jù),然后打出來看一下

foreach (IGrouping<string, Student> item in studentGroup)
            {
                Console.WriteLine(item.Key);
                foreach (var student in item)
                {
                    Console.WriteLine(student.StudentName);
                }
            }

執(zhí)行結(jié)果如下:

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

public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable
  {
    /// <summary>
    /// 獲取 <see cref="T:System.Linq.IGrouping`2"/> 的鍵。
    /// </summary>
    /// 
    /// <returns>
    /// <see cref="T:System.Linq.IGrouping`2"/> 的鍵。
    /// </returns>
    [__DynamicallyInvokable]
    TKey Key { [__DynamicallyInvokable] get; }
  }

IGrouping的key是作為自己的屬性來存儲了,TElement則實現(xiàn)了IEnumerable<TElement>,所以調(diào)用foreach遍歷IGrouping的時候返回的即是Student的集合了

這個探索是挺有趣的,通過神器vs的智能提示和源碼的實現(xiàn)最終知道了GroupBy的用法,并且了解了為什么這樣用。

同時也看出了通過接口可以巧妙的實現(xiàn)多態(tài),其中自然是妙趣無窮!

到此這篇關(guān)于c#中查詢表達式GroupBy的使用的文章就介紹到這了,更多相關(guān)c#查詢表達式GroupBy使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#編寫一個網(wǎng)游客戶端的完整步驟

    C#編寫一個網(wǎng)游客戶端的完整步驟

    這篇文章主要給大家介紹了關(guān)于C#編寫一個網(wǎng)游客戶端的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-11-11
  • C#判斷本地文件是否處于打開狀態(tài)的方法

    C#判斷本地文件是否處于打開狀態(tài)的方法

    這篇文章主要介紹了C#判斷本地文件是否處于打開狀態(tài)的方法,涉及C#操作文件的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • C#實現(xiàn)程序等待延遲執(zhí)行的方法

    C#實現(xiàn)程序等待延遲執(zhí)行的方法

    這篇文章主要介紹了C#實現(xiàn)程序等待延遲執(zhí)行的方法,涉及C#動態(tài)鏈接庫的使用及延遲的實現(xiàn)技巧,需要的朋友可以參考下
    2015-09-09
  • C#根據(jù)http和ftp圖片地址獲取對應(yīng)圖片

    C#根據(jù)http和ftp圖片地址獲取對應(yīng)圖片

    這篇文章主要為大家詳細介紹了C#根據(jù)http和ftp圖片地址獲取對應(yīng)圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 在C#中使用適配器Adapter模式和擴展方法解決面向?qū)ο笤O(shè)計問題記錄

    在C#中使用適配器Adapter模式和擴展方法解決面向?qū)ο笤O(shè)計問題記錄

    在開發(fā)基于MonoGame的游戲框架時,面臨SpriteFont和DynamicSpriteFont兼容問題,SpriteFont在內(nèi)容管道中編譯確定字號,導(dǎo)致不同字號需加載多個字體資源,本文給大家介紹在C#中使用適配器Adapter模式和擴展方法解決面向?qū)ο笤O(shè)計問題,感興趣的朋友一起看看吧
    2024-10-10
  • DirectoryEntry配置IIS7出現(xiàn)ADSI Error:未知錯誤(0x80005000)

    DirectoryEntry配置IIS7出現(xiàn)ADSI Error:未知錯誤(0x80005000)

    這篇文章主要介紹了DirectoryEntry配置IIS7出現(xiàn)ADSI Error:未知錯誤(0x80005000)的解決辦法
    2015-09-09
  • C#用委托BeginInvoke做異步線程

    C#用委托BeginInvoke做異步線程

    今天小編就為大家分享一篇關(guān)于C#用委托BeginInvoke做異步線程,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C#心跳機制服務(wù)器的示例代碼

    C#心跳機制服務(wù)器的示例代碼

    心跳機制出現(xiàn)在tcp長連接中,客戶端和服務(wù)器之見定時發(fā)送一種特殊的數(shù)據(jù)包,本文主要介紹了C#心跳機制服務(wù)器的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • C#分布式事務(wù)的超時處理實例分析

    C#分布式事務(wù)的超時處理實例分析

    這篇文章主要介紹了C#分布式事務(wù)的超時處理,以實例形式較為詳細的分析了C#分布式事務(wù)的超時處理相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • c#繼承與多態(tài)使用示例

    c#繼承與多態(tài)使用示例

    繼承是面向?qū)ο蟪绦蛟O(shè)計的主要特征之一,允許重用現(xiàn)有類去創(chuàng)建新類的過程。下面使用示例學(xué)習(xí)一下c#繼承與多態(tài)
    2014-01-01

最新評論

吴江市| 台湾省| 呼玛县| 黄龙县| 隆林| 曲阳县| 怀来县| 三江| 福泉市| 丹寨县| 龙山县| 西丰县| 岳普湖县| 托里县| 德钦县| 葵青区| 当雄县| 沂南县| 根河市| 罗江县| 东乌珠穆沁旗| 宁河县| 双桥区| 长子县| 永城市| 高平市| 岳阳县| 海城市| 金川县| 东城区| 古田县| 岚皋县| 巨野县| 比如县| 当涂县| 高要市| 华阴市| 宝坻区| 塔河县| 祁门县| 阳江市|