2012-08-08 68 views
0

我有一個叫做dtContext的DataContext,它有許多實體。現在我在數據庫中的數據是巨大的,所以我想知道如果我創建一個新的DataContext將我的數據庫中的所有數據提取到實體?這意味着所有的實體一旦完成新功能就會從我的數據庫中填入數據?還是僅在您從LINQ查詢中調用實體時才提取數據? 例如:DataContext是如何工作的?

line 1: dtContext dt = new dtContext(); 
line 2: IEnumerable<MyEntity> query = from q in dt.MyEntities select q; 

在其上線MyEntities將代表從數據庫的實際數據?

回答

0

您嘗試遍歷查詢結果集的點。

如果你想拉回數據的一個子集,然後添加一個where子句到你的查詢。

1

,直到你枚舉查詢它不查詢數據庫或致電ToList()ToArray()等,這被稱爲Deferred Execution

許多標準查詢運算符在使用foreach語句迭代 時返回元素。這些操作員基本上沒有 工作,直到第一個元素被請求,然後掛起,直到請求下一個元素 。在返回的查詢迭代之前, 對於這些語句中的任何一個都不會在內部執行任何工作。延遲執行允許您控制何時以及是否可能執行冗長的工作。

如果您希望立即實現查詢,請致電ToList,ToArray 或任何其他需要枚舉整個 序列的運算符以返回結果。

LINQ利用C#2.0中添加的語言功能使其更簡單 當編寫方法時,當迭代 時,返回一個元素。 yield return語句基本上暫停了一個由 返回一個值的循環,並在下一次調用MoveNext時調用它的確切位置。

在MSDN Library描述使用延遲執行的運營商:

本方法採用延遲執行實現。即時 返回值是存儲 執行操作所需的所有信息的對象。此方法代表的查詢不是 ,直到通過直接調用其 GetEnumerator方法或在Visual C#中使用foreach或 中的每一個在Visual Basic中進行枚舉爲止。

1

沒有答案。由於您沒有編寫查詢,因此第一行不會獲取任何數據。第二行不會得到任何數據,因爲你只是寫了查詢但沒有執行它。執行一個查詢可以在結果迭代時完成(像的foreach,ToArray的(),第()等)