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 令人驚...