| 項目 | LINQ (Language Integrated Query) | LINQ to SQL |
|---|---|---|
| 定位 | 語言層面的統一查詢語法 | .NET 3.5 組件,針對 SQL Server 的輕量級 ORM |
| 資料源 | 任意實作 IEnumerable<T> 的來源 (XML、集合、DataSet、資料庫...) | 僅限 SQL Server |
| 核心優勢 | 編譯時期型別檢查、IntelliSense、統一語法 | 物件關聯映射、變更追蹤、延遲載入 |
關係型資料庫 (集合導向、結構化) 與 物件導向語言 (圖狀導向、封裝行為) 之間的不匹配,ORM 透過映射層自動轉換。
var q = from...Where、Select 等標準查詢運算子new Customer { Name = "Tom" }select new { c.Name, c.Age }c => c.Age > 18Expression<Func<T,bool>> 讓查詢可序列化為 SQLfrom c in ctx.Customers select c (語法糖).dbml + .designer.cs[Table], [Column])sqlmetal /conn:"server=.;db=Northwind" /dbml:Northwind.dbml /namespace:MyApp /serialization:Unidirectional
.dbml + 外部映射檔 .map (XML 格式)LinqToSqlMapping.xsd 驗證<Database Name="Northwind">
<Table Name="dbo.Customers" Member="Customer">
<Column Name="CustomerID" Member="ID" Storage="_ID" DbType="NChar(5) NOT NULL" IsPrimaryKey="true" />
<Column Name="CompanyName" Member="CompanyName" Storage="_CompanyName" DbType="NVarChar(40) NOT NULL" />
<Association Name="FK_Orders_Customers" Member="Orders" Storage="_Orders" ThisKey="CustomerID" OtherKey="CustomerID" />
</Table>
</Database>
CSharpSamples.zip)