LINQ 專案 SQL 整合

2021-04-17 11:29:33 字數 2761 閱讀 2944

.net 語言整合查詢可用於查詢關係資料儲存,而不必離開本地程式語言的語法或編譯時環境。該工具(代號為 dlinq)利用 sql 架構資訊到 clr 元資料的整合。該整合將 sql 表和檢視定義編譯為可以從任何語言訪問的 clr 型別。

dlinq 定義了兩個核心屬性([table] 和 [column]),它們指示哪些 clr 型別和屬性對應於外部 sql 資料。[table] 屬性可以應用於類,並將 clr 型別與命名的 sql 表或檢視相關聯。[column] 屬性可以應用於任何欄位或屬性,並將成員與命名的 sql 列相關聯。這兩個屬性均被引數化,以允許保留特定於 sql 的元資料。例如,請考慮以下這個簡單的 sql 架構定義:

create

table

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...