Linq to sql 延遲執行

2021-06-17 22:28:44 字數 1965 閱讀 8358

iqueryable

query =

from

c in

ctx.customers

selectc;

這樣的查詢句法不會導致語句立即執行,它僅僅是乙個描述,對應乙個

sql。僅僅在

需要使用的時候才會執行語句,比如:

iqueryable

query =

from

c in

ctx.customers

select

c;

foreach

(customer

c in

query)

response.write(c.customerid);

如果你執行兩次

foreach

操作,將會捕獲到兩次

sql

語句的執行:

iqueryable

query =

from

c in

ctx.customers

select

c;

foreach

(customer

c in

query)

response.write(c.customerid);

foreach

(customer

c in

query)

response.write(c.contactname);

對應sql:

select [t0].[customerid],[t0].[companyname], [t0].[contactname], [t0].[contacttitle],

[t0].[address], [t0].[city], [t0].[region],[t0].[postalcode], [t0].[country], [t0].[phone],

[t0].[fax]

from [dbo].[customers] as [t0]

select [t0].[customerid],[t0].[companyname], [t0].[contactname], [t0].[contacttitle],

[t0].[address], [t0].[city], [t0].[region],[t0].[postalcode], [t0].[country], [t0].[phone],

[t0].[fax]

from [dbo].[customers] as [t0]

對於這樣的需求,建議你先使用

tolist()

等方法把查詢結果先進行儲存,然後再對集合

進行查詢:

ienumerable

<

customer

> customers = (

from

c in

ctx.customers

select

c).tolist();

foreach

(customer

c in

customers)

response.write(c.customerid);

foreach

(customer

c in

customers)

response.write(c.contactname);

延遲執行的優點在於我們可以像拼接

sql

那樣拼接查詢句法,然後再執行:

varquery =

from

c in

ctx.customers

selectc;

varnewquery = (

from

c in

query

select

c).orderby(c => c.customerid);

Linq 延遲執行

使用linq時,其中乙個重要概念就是延遲執行,所有的謂詞求值需要等到觸發時才會被呼叫。在宣告時,它們是不執行的,除非呼叫lambda表示式,造成其中的 開始執行,否則不會被執行。如果lambda表示式執行的代價比較高 如呼叫資料庫,密集計算等 那麼為了優化 通過使用 to 方法來轉換為集合方式,減少...

oracle job延遲執行

oracle job在執行的時候可能會遇到在設定的週期內不能執行完的情況,即前一次還沒有執行完,又到了下一次執行時間。以下的操作來模擬這種情況,來看一下oracle是怎麼樣處理的。環境 1.建立表 create table t test sid number,dt date 2.建立儲存過程,執行一...

C 延遲執行

借鑑於該篇部落格 先看兩個方法 public class yieldclasses return list public static ienumerablewithyied 分別用執行他們接過是怎樣 yieldclasses.withnoyied yieldclasses.withyied 令人驚...