我有一个linq查询,它将客户表中的所有记录提取到一个可观察的集合,如下所示:
customerList = new ObservableCollection<customer>(dbContext.customers);
dgRecords1.ItemsSource = customerList;
列表绑定到数据网格。 customer表包含近百个字段。但是我只在数据网格上显示了几个字段。我的问题是
是否使用linq查询仅从数据库中引入选定字段可以提高客户屏幕的速度?
我需要过滤并有时删除此列表中的记录。
哪个是选择几个字段到可观察集合的最佳方法,有人可以提供一些示例linq查询吗?
答案 0 :(得分:8)
优化速度的提示:
ObjectTrackingEnabled
)将减少后处理数据的开销...但是坦率地说,当我们遇到这个问题时,我们通过写“小巧玲珑”并且老去学校“一劳永逸地”解决了这个问题:
var list = connection.Query<CustomerViewModel>(
"select {some specific cols} from Customers").ToList();
其中CustomerViewModel
是一个与LINQ等无关的简单POCO类型,它只具有所需的值,例如:
class CustomerViewModel {
public int Id {get;set;}
public string Name {get;set;}
// ...
}
这会减少所有不必要的开销,并且只是在您想要显示数据时非常理想;此外,参数化和实现层非常优化(使用策略缓存,以获得最佳性能)。
答案 1 :(得分:4)
如果您只选择所需的列而不是所有列,则性能会有所提高。您可以使用StopWatch
来实际计算差异。最好只从数据库中选择所需的列,而不是所有列。
您可以考虑的另一件事是使用Skip
和Take
实施分页。您可能会看到:LINQ TO SQL GridView (Enhanced Gridview)