LINQ 查詢運算式(Language-Integrated Query)是一種數據查詢語言,可以讓我們使用同一個語句來對不同資料來做資料查詢 (包括Objects、SQL、Datasets、Entities、Data Source、XML/XSD等),並且具有擴充性。

使用的方式很簡單 首先,要先載入System.Linq 命名空間類別庫就可以開始使用 LINQ 類別和介面

using System.Linq;

在一開始,先看第一個LINQ範例 透過 from..select取得陣列中的資料 範例:

using System;
using System.Linq;

namespace ConsoleApplication2
{
    class Program
    {
        

        static void Main(string[] args)
        {
            int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            //透過LINQ的 from select 將資料取出來
            var myLinq = from x in num select x;
            foreach (var i in myLinq)
            {
                Console.WriteLine(i);
            }
        }
    }
}

在這簡易的範例中,我們先建立 num數字陣列, 再透過LINQ的 from select 將資料取出來,儲存在myLinq變數中 再用迴圈將資料一筆一筆取出。

接下來,會藉由一個物件資料作為例子,來說明如何使用LINQ查詢資料:

LINQ 範例

利用 C# 系統集合泛型-透過list建立物件資料 中的範例來進行修改成LINQ查詢方式 來一一說明如何透過LINQ進行查詢 範例(修改自 list物件資料範例) 先新增

using System.Linq;

在調整內容

將範例中的這行
List<Student> students = GetStudents();
改成
var getstudents = GetStudents();
var students = from st in getstudents select st;

結果如下:

using System;
using System.Linq;
using System.Collections.Generic;

namespace ConsoleApplication2
{
    class Program
    {
        public class Student
        {
            public string Name { get; set; }
            public int Sexual { get; set; }
            public int ID { get; set; }
        }

        public static List<Student> GetStudents()
        {
            List<Student> students = new List<Student>
            {
               new Student {Name="Adam", Sexual=1, ID=1055010001},
               new Student {Name="Steven", Sexual=2, ID=1055010002},
               new Student {Name="Brown", Sexual=1, ID=1055010003},
               new Student {Name="Cindy", Sexual=2, ID=1055010004},
               new Student {Name="Tom", Sexual=1, ID=1055010005}
            };

            return students;

        }
        
        static void Main(string[] args)
        {
            var getstudents = GetStudents();
            var students = from st in getstudents select st;
            
            foreach (var i in students)
            {
                string sex = i.Sexual == 1 ? "male" : "female";
                Console.WriteLine("Name:" + i.Name + ", Sexual:" + sex + ", ID:" + i.ID);
            }

        }
    }
}

From..Select 搜尋資料

var students = from st in getstudents select st;

where 篩選資料 透過 where ,取出所有男性的資料

var students = from st in getstudents where st.Sexual==1 select st;

orderby 排序資料 可以搭配 **ascending (小至大, A to Z)排序或descending(大至小, Z to A)**排序 這裡使用 descending 將ID由大至小排序後,再取出

var students = from st in getstudents orderby st.ID descending select st;

group by 群組 可以將資料依照群組分類,儲存成物件(包含 Key 及對應項目)

因此在取出資料時, 第一次迴圈會取出 Group 物件,可以透過 .Key屬性得到group值 第二層迴圈會取出Group物件中的對應資料 範例:

var getstudents = GetStudents();
var students = from st in getstudents group st by st.Sexual ;

foreach (var i in students)
{
		//第一層迴圈取出group物件,可以透過 .Key得到group值
    Console.WriteLine("Group物件的Key="+i.Key);
    foreach(var j in i)
    {
    		第二層迴圈可以取出Group對應資料
        Console.WriteLine(j.Name);
    }
}
/*
結果:
Group物件的Key=1
Adam
Brown
Tom
Group物件的Key=2
Steven
Cindy
*/

使用into將group暫存在一個變數, 並且對群組執行額外的邏輯, 再透過select結束查詢語句 當然,可以同時加入 where

var students = from st in getstudents where st.Name!="Tom" group st by st.Sexual into x where x.Key==1 select x;