.net 語言整合查詢可用於查詢關係資料儲存,而不必離開本地程式語言的語法或編譯時環境。該工具(代號為 dlinq)利用 sql 架構資訊到 clr 元資料的整合。該整合將 sql 表和檢視定義編譯為可以從任何語言訪問的 clr 型別。
dlinq 定義了兩個核心屬性([table] 和 [column]),它們指示哪些 clr 型別和屬性對應於外部 sql 資料。[table] 屬性可以應用於類,並將 clr 型別與命名的 sql 表或檢視相關聯。[column] 屬性可以應用於任何欄位或屬性,並將成員與命名的 sql 列相關聯。這兩個屬性均被引數化,以允許保留特定於 sql 的元資料。例如,請考慮以下這個簡單的 sql 架構定義:
createtable
people (
name
nvarchar(32
) primary
keynot
null
,age
intnot
null
,cancode
bitnot
null
)create
table
orders (
orderid
nvarchar(32
) primary
keynot
null
,customer
nvarchar(32
) not
null
,amount
int)
clr 等效形式如下所示:
[table(name="people")]
public
class
person
[table(name="
orders")]
public
class
order
在該示例中,請注意,可以為空的列對映到 clr 中可以為空的型別(可以為空的型別首次出現在 .net framework 版本 2 中),並且對於無法 1:1 對應於 clr 型別的 sql 型別(例如,nvarchar、char、text),原始 sql 型別會保留在 clr 元資料中。
要針對關係儲存發出查詢,linq 樣式的 dlinq 實現會將查詢從表示式樹形式轉換為 sql 表示式以及適用於遠端計算的 ado.net dbcommand 物件。例如,請考慮以下這個簡單的查詢:
//establish a query context over ado.net sql connection
datacontext context
=new
datacontext(
"initial catalog=petdb;integrated security=sspi");
//grab variables that represent the remote tables that
//correspond to the person and order clr types
table custs
=context.gettable();
table orders
=context.gettable();
//build the query
var query
=from c
incusts, o
inorders
where o.customer
==c.name
select
new;
//execute the query
foreach
(var item
inquery)
console.writeline(
" ",
item.name, item.orderid,
item.amount, item.age);
datacontext 型別提供乙個輕量轉換器,它的工作是將標準查詢操作符轉換為 sql。datacontext 使用現有的 ado.net idbconnection 來訪問儲存,並且可以使用已建立的 ado.net 連線物件或者可用於建立連線物件的連線字串來進行初始化。
gettable 方法提供與 ienumerable 相容的變數,這些變數可用於查詢表示式,以表示遠端表或檢視。呼叫 gettable 不會導致與資料庫進行互動 – 雖然它們表示使用查詢表示式與遠端表或檢視進行互動的潛在可能。在上述示例中,直到程式迭代完查詢表示式,才會將查詢傳送到儲存,在這種情況下,使用的是 c# 中的 foreach 語句。當程式首次迭代完查詢後,datacontext 機制會將表示式樹轉換為以下將傳送給儲存的 sql 語句:
select[t0].[age],
[t1].
[amount],
[t0].
[name],
[t1].
[orderid
]from
[customers]as
[t0],
[orders]as
[t1]where[t1
].[customer]=
[t0].
[name
]
需要注意的是,通過將查詢功能直接構建到本地程式語言中,開發人員可以完全控制關係模型,而不必將關係靜態轉換為 clr 型別。完整的物件/關係對映還可以利用這個核心查詢功能,以方便需要該功能的使用者。
1
了解 語言整合 LINQ 查詢
linq提供了一種跨資料來源和資料格式的同意模型,實現查詢。ienumerable介面在.net中是非常重要的介面,它允許開發人員定義foreach語句功能的實現並支援非泛型方法的簡單的迭代,ienumerable介面是.net framework中最基本的集合訪問器。它定義了一組擴充套件方法,用來...
sql轉Linq的工具
本文 這些天寫linq挺煩人的,就上網搜搜可有什麼好的sql轉linq的工具,咦,馬上就看上了linqer。哈哈,介紹一下使用方法吧 第一步 執行這個神馬檔案。第二步 指定乙個路徑給它。他會生成乙個linqer.exe可執行的檔案。第三步 執行這個exe檔案,點選add按鈕,第四步 在彈出的add介...
c 學習筆記 語言整合查詢LINQ
using system using system.collections.generic using system.linq using system.text using system.threading.tasks 語言整合查詢linq 查詢表示式必須以 from 子句開頭,且必須以 sele...