首頁 > 軟體

LINQ基礎之From和GroupBy子句

2022-04-20 13:02:19

FROM子句

一、簡單FROM子句

獲取資料來源:

var queryAllCustomers =
        from cust in Customers
        select cust;

分析:

查詢表示式必須以from子句開頭
例子中cust是範圍變數,範圍變數類似於foreach迴圈中的迭代變數,但在查詢表示式中,實際上不發生迭代。執行查詢時,範圍變數將用作對Customers中的每個後續元素的參照。因為編譯器可以推斷cust的型別,所以不必顯示指定此型別。
Customers是資料來源,實現了IEnumerable或IEnumerable(T)或其派生介面的

二、複合FROM子句

查詢出成績有90分以上的學生,得到他們的名字和成績

//資料來源
 IList<Student> students = new List<Student>
{
    new Student{ Name="Kevin", Score=new List<int>{89,93,88,78}},
    new Student{ Name="Jackie",Score=new List<int>{92,87,83,91}},
    new Student{ Name="Helen",Score=new List<int>{53,76,72,62}}
};
            //所有的Linq查詢操作都由以下三個不同的操作組成:
            //1.獲得資料來源
            //2.建立查詢
            //3.執行查詢

            //使用複合from子句查詢命令
            var getStudent =
                    from student in students
                    from score in student.Score
                    where score > 90
                    select new { Name = student.Name, Score = score };

            foreach (var st in getStudent)
            {
                Console.WriteLine("NAME:{0},SCORE:{1}",st.Name,st.Score);
            }

分析:

我們可以看到學生物件中有個Score屬性,Score屬性本身就是List集合,這時候我們就要用到複合from子句進行查詢了。首先遍歷學生物件集合中的每個學生物件,然後在用另一個from子句,對每個學生物件中的Score屬性進行遍歷,篩選出含有90分以上的學生資訊進行返回。

GroupBy子句

一、簡介

group子句返回一個IGrouping(T Key,T element)物件序列,編譯時,group子句被轉換成對GroupBy方法的呼叫。

二、案例

案例一:

根據首字母分組,並列印到控制檯

//資料來源
string[] fruits = { "apple", "banana", "peach", "orange", "melon", "lemon" };

//分組查詢的查詢語句
var query = from f in fruits
            group f by f[0];

//執行查詢
foreach (var letters in query)
{
    Console.WriteLine("words that start with letter:" + letters.Key);
    foreach (var word in letters)
    {
        Console.WriteLine(word);
    }
}

分析:

首先遍歷字串陣列中的每個字串,然後根據每個字串的首字母進行分組,返回結果.

案例二:

var query = from f in fruits
             group f by f[0] into g
             where g.Key == 'p' || g.Key == 'b'
             select g;

分析:

如果您想要對每個組執行附加查詢操作,則可以使用into上下文關鍵字指定一個臨時識別符號。使用into時,必須繼續編寫該查詢,並最終用一個select語句或另一個group子句結束該查詢。

案例三:

string[] strs = { "胡廣成", "張國榮", "劉德華", "故國冰封", "萬里雪飄", "AAA", "胡翰軒", "張傑" };
            var list5 = strs
                //.Where(a => a.Length == 3)
                .Select(item => item)
                .GroupBy(item => item.Length);//分組   分組依據是字串的長度
            foreach (var item in list5)
            {
                Console.WriteLine("----------------");
                Console.WriteLine($"分組欄位是{item.Key}");  //item.Key是分組依據 顯示分組欄位
                foreach (var items in item)//內層迴圈遍歷分組項
                {
                    Console.WriteLine(items);
                }
            }

分析:

按照名字的長度進行分組顯示。

三、多欄位分組範例

GroupBy(x => new { x.a , x.b, x.c }).Select( x=> ( new Class名 { a=x.Key.a , b=x.Key.b , c = x.Key.c } ))

到此這篇關於LINQ使用From和GroupBy子句的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com