91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c#中查詢表達式GroupBy怎么用

發布時間:2021-11-03 13:36:38 來源:億速云 閱讀:143 作者:小新 欄目:開發技術

這篇文章主要介紹c#中查詢表達式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.一下看看提示信息

c#中查詢表達式GroupBy怎么用

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

然后可以foreach下item試一試

c#中查詢表達式GroupBy怎么用

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

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

執行結果如下:

c#中查詢表達式GroupBy怎么用

所以可以斷定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的用法,并且了解了為什么這樣用。

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

以上是“c#中查詢表達式GroupBy怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桑植县| 津市市| 昭通市| 兴国县| 麦盖提县| 库伦旗| 淮滨县| 新安县| 湘阴县| 珠海市| 桑日县| 济源市| 辉南县| 叙永县| 锡林郭勒盟| 浠水县| 扎囊县| 兴隆县| 抚顺县| 平潭县| 德安县| 潮安县| 文山县| 民丰县| 建水县| 定安县| 雅安市| 饶平县| 大丰市| 收藏| 剑河县| 西林县| 乐平市| 定远县| 海兴县| 平乡县| 自治县| 将乐县| 华坪县| 吉林省| 会泽县|