-
LINQ
-
為 IEnumerable 介面鎖定義的集合擴充
- 其泛型版本為 IEnumerable<T>
-
核心命名空間
- System.Collections.Gereric
- System.Linq
-
可讀取資料來源
-
資料庫
-
LINQ to ADO.NET
- LINQ to SQL
- LINQ to DataSet
-
陣列/集合物件/文字檔
-
LINQ to Objects
- System.Collection
-
XML文件
-
LINQ to XML
- System.Xml.Linq
-
Entity Framework
- LINQ to Entites
-
程式碼範例
-
"方法" 與 "運算子" 的寫法
- IEnumerable<string> enumWeek =
weekDayList.Where(
weekDay => weekDay.StartWith("T"));
- IEnumerable<string> enumWeek=
from weekDay in weekDayList
where weekDay.StartWith("T")
select weekDay;
-
SQL 與 LINQ 的寫法
- SELECT BookTitle FROM Book
WHERE BookTitle LIKE '%ASP.NET%';
- var enumQuery =
from book in db.book
where book.BookTitle.Contains("ASP.NET")
select book;
-
LINQ 所查詢出來的結果都必須由
IEnumerable<T> 型態的變數接收其結果
- 亦可用 var 宣告的變數皆收
-
基本架構
-
起始
- from
-
必備
- in
-
條件判斷
- where
- orderby
- join
-
結尾
- select
- group
-
委派
-
正規
- class Program
{
static void Main(string[] args)
{
Program pg = new Program();
helloDelegate myHelloDelegate = new helloDelegate(pg.ReturnMessage);
string message = myHelloDelegate("Projoe");
Console.WriteLine(message);
Console.ReadKey();
}
public string ReturnMessage(string pName)
{
return "Hello," + pName;
}
public delegate string helloDelegate(string pName);
}
-
匿名
- class Program
{
static void Main(string[] args)
{
Program pg = new Program();
helloDelegate myHelloDelegate = delegate(string pName){
return "Hello," + pName;
};
Console.WriteLine(myHelloDelegate("Projoe"));
Console.ReadKey();
}
public delegate string helloDelegate(string pName);
}
-
取代舊有的資料存取技術
- 可盡量避免程式開發人員使用 SQL CMD的機會
- 達到更好的分層架構
-
實體資料模型(EDM)
- 利用 ADO.NET建立資料模型(類別)
- 利用 XML 產生 類別 與 資料表 的對應關係
-
示意圖
- 資料存取程序
- EDM
- 資料庫
-
存取資料庫程序
- 建立 實體資料模型(*.edmx,也是 XML 類型檔案)
- 針對模型建立實體類別(class)
- 設計客端程式,透過 LINQ 或 Entity SQL 操作實體類別
-
示意圖
- 資料存取程序
- xxx.Designer.cs(class)
- xxx.edmx(XML)
- 資料庫