正如我从 MVVM 模式中了解到的那样,每个 ViewModel 中都有一个 ObservableCollection,它保存所有模型。我有一个像这样实现的 ViewModel:
public class ViewModel {
public void LoadData() {
Items = new ObservableCollection(_logic.Select());
IsDataLoaded = true;
}
}
比方说_logic.Select()
返回 List<>
表中的所有记录。现在数据量很大怎么办?如果表中有数千甚至数十万条记录怎么办?我应该将它们全部加载到 ObservableCollection
中吗? ?加载它们需要很长时间。
最佳答案
您不应加载数据库中的所有数据,而应仅加载您需要的数据。 想想如果您只需要一个注册表,加载 1000 个注册表会对您的性能造成多么严重的影响:
您需要查询数据库。使用服务器创建并执行查询并将所有数据保存在某处(通常在内存中)。 然后发送给客户。 客户端还需要将数据保存在某处。
如前所述,您可以使用服务器端分页和/或过滤。
逻辑很简单,在您的服务器上您可能有一个“return MyEntity;”或类似的方法。
与其这样做,为什么不实现 Linq 提供的“Take”扩展方法。
编辑:
该文章涵盖的内容不仅仅是分页,但要特别注意:
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();
}
}
检查“q”的 qhe 值是否使用 Skip 和 Take 方法转到特定项目,并从那里获取 X 数量的项目。
最后,排序与上面的代码非常相似,但更复杂。您可以使用 Linq 中的Where 方法来实现它。
关于c# - MVVM:加载大数据记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056278/