正如我从MVVM模式中学到的,每个ViewModel中都有一个ObservableCollection,它包含所有模型。我有一个像这样实现的ViewModel:
public class ViewModel {
public void LoadData() {
Items = new ObservableCollection(_logic.Select());
IsDataLoaded = true;
}
}
假设_logic.Select()
返回表中所有记录的List<>
。现在如果数据很大怎么办?如果表中有数千甚至数十万条记录怎么办?我应该在ObservableCollection
中加载它们吗?它们需要花费大量时间才能加载。
答案 0 :(得分:3)
您不应该从数据库加载所有数据,只加载您需要的数据。 想想如果你只需要一个注册表,加载1000个注册表会对你的表现造成多大的损害:
您需要查询数据库。使用服务器创建并执行查询并将所有数据保存在某处,通常在内存中。 然后将其发送给客户端。 客户端还需要将数据保存在某处。
如前所述,您可以使用服务器端分页和/或过滤。
逻辑很简单,在你的服务器上你可能有一个&#34;返回MyEntity;&#34;或类似的方法。
为什么不实施&#34; Take&#34;而不是这样做呢? Linq提供的扩展方法。
编辑:
该帖子不仅包括分页,还要特别注意:
public IEnumerable<SuperEmployee> GetSuperEmployees(int page)
{
using (var context = new NORTHWNDEntities())
{
var q = context.SuperEmployeeSet.OrderBy(emp=>emp.EmployeeID).Skip(page * PageSize).Take(PageSize);
return q.ToList();
}
}
检查&#34; q&#34;的值使用Skip and Take方法转到特定项目,然后从中获取X个数量。
最后,排序与上面的代码非常相似,但更复杂。您可以使用Linq中的Where方法来实现它。