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;