2015-04-06 67 views
1

我有一些LINQ to SQL類是數據庫中的單個表(即,我將表從SQL Server對象瀏覽器拖放到DBML設計佈局窗口)。我正在考慮過濾表時,我填我的視圖模型觀察到的集合,像這樣:(註釋掉了,但你的想法):LINQ to SQL或其他選項

class ObservableDocuments : ViewableCollection<Document> 
{ 
    public ObservableDocuments(DataClasses1DataContext dataDc) 
    { 
     foreach (Document doc in dataDc.Documents)//.Where(x => x.JobID == 1)) 
     { 
      this.Add(doc); 
     } 
    } 
} 

我想知道如果這是處理這個過濾的最佳方式。在實際查詢數據庫之前,LINQ to SQL是否等待直到此調用,還是整個表仍然被拉入DataContext.Documents表中,然後我只是將我想要的那些添加到ObservableCollection中?如果是後者,那麼LINQ to SQL中有更好的方法來過濾結果,還是應該離開這個框架?

+0

是//.Where(x => x.JobID == 1))什麼想篩選,因爲您的評論出來 –

+0

@COLDTOLD是的,我展示目前如何做到這一點(不過濾器)和我打算做的事情(過濾器),但我正在添加JobID字段和其他一些邏輯來支持它。這個問題引起了我的興趣,所以我想在太遠之前詢問,以防我忽略了一些事情。 –

+0

在課程結束後是否將文檔添加到數據庫中?如果你已經緩存了一些已被刪除的文檔,該怎麼辦?只需在構造函數中使用連接字符串,然後按需填充文檔可能會更好。 –

回答

2

使用LINQ to SQL意味着在IQueryable<T>上應用LINQ運算符將被添加到SQL語句中,而不是使用IEnumerable<T>,該運算符將運算符應用於完全檢索的結果。

因此,當應用Where運營商,在你的情況下,並使用組合IQueryable<T>將足夠好。如果迭代結果或致電ToList(),結果將填充。

的更多信息:Using IQueryable with Linq

+0

我看了你提供的鏈接,我想我明白了。但是。 。 。這是VS中的黑盒子。 。 。我拖放表並自動生成DataContext類代碼。那麼如何確保我使用IQueryable ?我仍然可以在整個過程中調用SubmitChanges()以進行更新和插入/刪除操作?從我看到的情況看,Where方法是IQueryable 。 。 。但我不能確定。 –

+0

默認情況下,DbContext將使用IQueryable 。您可以通過將鼠標懸停在文檔和位置來檢查類型和返回類型來驗證此情況。 –