我有一些LINQ to SQL类,它们是数据库中的单个表(即,我将表从SQL Server对象浏览器拖放到DBML设计布局窗口)。当我填充我的视图模型可观察集合时,我正在考虑过滤表格:(注释掉,但你明白了):
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 :(得分:2)
使用LINQ to SQL意味着在IQueryable<T>
上应用LINQ运算符将添加到SQL语句中,而不是使用IEnumerable<T>
,它将运算符应用于完全检索的结果。
因此,在应用Where
运算符时,在您的情况下,使用组合IQueryable<T>
就足够了。如果您遍历结果或调用ToList()
,则会填充结果。