欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

說明:

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

實驗基礎數據用例:

Student類:

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

        public string ClassName { get; set; }

        public string StudentName { get; set; }
    }

設定數據如下:

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},
            };

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

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

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

可以首先foreach一下studentGroup

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

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

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

然后可以foreach下item試一試

如果所示,果然是Student,根據推斷,現在在foreach中遍歷所有數據,然后打出來看一下

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

執(zhí)行結果如下:

所以可以斷定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則實現了IEnumerable<TElement>,所以調用foreach遍歷IGrouping的時候返回的即是Student的集合了

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

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

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

相關文章

  • c#判斷輸入的是不是數字的小例子

    c#判斷輸入的是不是數字的小例子

    c#判斷輸入的是不是數字的小例子,需要的朋友可以參考一下
    2013-03-03
  • C#實現圖片輪播功能的示例代碼

    C#實現圖片輪播功能的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C#實現圖片輪播功能,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Winform下實現圖片切換特效的方法

    Winform下實現圖片切換特效的方法

    這篇文章主要介紹了Winform下實現圖片切換特效的方法,包括百葉窗、淡入、旋轉等多種效果,需要的朋友可以參考下
    2014-08-08
  • c# 實現子窗口關閉父窗口也關閉的簡單實例

    c# 實現子窗口關閉父窗口也關閉的簡單實例

    下面小編就為大家?guī)硪黄猚# 實現子窗口關閉父窗口也關閉的簡單實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • c#中task與thread區(qū)別及其使用的方法示例

    c#中task與thread區(qū)別及其使用的方法示例

    本文主要介紹了c#中task與thread區(qū)別及其使用的方法示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • winform 調用攝像頭掃碼識別二維碼的實現步驟

    winform 調用攝像頭掃碼識別二維碼的實現步驟

    這篇文章主要介紹了winform 調用攝像頭掃碼識別二維碼的實現步驟,幫助大家更好的理解和學習使用winform,感興趣的朋友可以了解下
    2021-02-02
  • C# Base64編碼函數

    C# Base64編碼函數

    Base64編碼的思想是是采用64個基本的ASCII碼字符對數據進行重新編碼。它將需要編碼的數據拆分成字節(jié)數組。
    2009-06-06
  • C#中使用FilleStream實現視頻文件的復制功能

    C#中使用FilleStream實現視頻文件的復制功能

    這篇文章主要介紹了C#中使用FilleStream實現視頻文件的復制功能,本文通過實例代碼給大家介紹的非常想詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • C#實現簡單的計算器功能

    C#實現簡單的計算器功能

    這篇文章主要為大家詳細介紹了C#實現簡單的計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • WinForm限制窗體不能移到屏幕外的方法

    WinForm限制窗體不能移到屏幕外的方法

    這篇文章主要介紹了WinForm限制窗體不能移到屏幕外的方法,實例分析了C#中WinForm窗體操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08

最新評論