簡體   English   中英

LINQ(L2E)具有存儲過程和IQueryable

[英]LINQ (L2E) with stored procedure and IQueryable

考慮一個正常的Linq表達式將是這樣的:
(這只是讓事情更容易理解的樣本)

 IQueryable<Person> personQuery= (from ppl in PersonContext  
                      select ppl).ASQueryable();


List<Person>personList = personQuery.where(x => x.age==13).ToList();

所以,如果我決定將linq查詢的第一部分放在存儲過程中,
事情會有這樣的事情。

 IQueryable<Person> personQuery= PersonContext.sp_RetrievePerson().ASQueryable();

 List<Person> personList = personQuery.where(x => x.age==13).ToList();

所以對於這個問題,我相信第一種方法只在調用toList()時才發送sql調用。
換句話說,發送到sql執行的查詢將是

Select * from Person where age=13

但是對於方法2,此查詢將被執行多少次?
如果它只發送了一次,是否會使調用存儲過程變得多余,因為已知存儲過程執行速度更快以及查詢發送到sql的樣式如何?

我不確定這個,但PersonContext.sp_RetrievePerson()返回一個ObjectResult ,它在內部使用DbDataReader。 這意味着存儲過程被調用一次, personQuery.where(x => x.age==13)迭代結果行並過濾掉不匹配的對象。

通過使用存儲過程,您可以在查詢數據庫時獲得較小的性能提升,但在從數據庫中讀取后,您必須評估人員表中的每個對象。 所以我認為在這種情況下,如果為存儲過程提供參數age以過濾數據庫中已有的結果,則使用存儲過程才有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM