【问题标题】:How to get data partially from Realm database如何从 Realm 数据库中获取部分数据
【发布时间】:2021-02-19 18:12:38
【问题描述】:

如何部分地从领域获取数据,Android 屏幕的主要部分无法显示超过 10-20 个项目,因此当用户只看到 10-20 行时,没有必要加载 1000 行。 所以我找到了一个解决方案来部分获取数据,如下所示:

FetchDocumentsCommand = new MvxCommand(
  () =>
    {
      if (//Here I need to find a way to get data for example if I had it as pages from page 1/2/3)
      {
        //The load would execute for some specific page and add it to an ObservableCollection
        //So it becomes less laggy
        FetchDocumentTask = MvxNotifyTask.Create(LoadDocuments);
        RaisePropertyChanged(() => FetchDocumentTask);
      }
    });

当我尝试为我从 Realm 获取数据时出现问题,它看起来像这样

private async Task LoadDocuments()
 {
   var docs = _documentService.GetRealmDocuments();
   Documents.AddRange(docs);
 }
public IEnumerable<Document> GetRealmDocuments()
{
    return RealmService.Realm.All<Document>();
}

我的问题是,当我从领域中获取它时,我可以如何减少分页?

【问题讨论】:

    标签: c# xamarin.android realm mvvmcross


    【解决方案1】:

    Realm 对象是延迟加载的,因此加载 10 个对象或 1000 个对象之间基本上没有区别。来自文档

    由于 Realm 中的查询是惰性的,因此执行这种分页 行为根本不需要,因为 Realm 只会从 显式访问后的查询结果。

    如果您确实想要对某些 ​​UI 功能进行分页,只需填充一个结果对象,然后只访问您需要的数据量即可。从概念上讲,它看起来像这样

    // load the dogs and only display the first 5
    let dogs = realm.objects(Dog.self)
    for i in 0..<5 {
        let dog = dogs[i]
        // display dog
    }
    

    需要记住的一点 - 领域结果对象不保证排序,因此您应该在读取对象时添加某种排序

    let dogs = realm.objects(Dog.self).sorted(by: "dog_name")
    

    这将在添加、修改或删除狗时保持您的订单。

    【讨论】:

      猜你喜欢
      • 2014-06-10
      • 2018-08-12
      • 2017-07-06
      • 2019-05-14
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      相关资源
      最近更新 更多