【问题标题】:How can I query a RealmList with Realm (v0.80) for Xamarin dotnet?如何使用 Realm (v0.80) 为 Xamarin dotnet 查询 RealmList?
【发布时间】:2016-12-14 04:42:06
【问题描述】:

我有 2 节课:

public class Invoice : RealmObject
{
   public int Id;
   public string Name { get; set; }
   public IList<Product> Products { get; }
}


public class Product : RealmObject
{
   public int Id { get; set; }
   public string Name { get; set; }
   public double Price { get; set; }
}

如何进行查询以列出包含特定产品的所有发票?

我会这样编码我的 LINQ 查询,但我得到一个不受支持的异常:

realm.All<Invoice>().Where(i => i.Products.Any(p => p.Name == "product 1"));

我可以这样做,但是获取每个产品的发票数量太长了。

realm.All<Invoice>().ToList().Where(i => i.Products.Any(p => p.Name == "product 1"));

我已经尝试了任何我能想到的方法,但它不起作用。

欢迎任何帮助,因为列出所有产品并计算其中包含的发票数量确实需要很长时间。

【问题讨论】:

  • 谢谢,我检查过那个,但它不是一回事。查看一对多 IList 这是我的问题。使用 Contains 或 Any 进行查询不起作用。我唯一的选择是遍历列表的每个元素,但这非常慢并且超出了目的。

标签: c# realm


【解决方案1】:

在最新版本 (0.81.0) 中,我们增加了对 inverse relationships 的支持。所以你可以稍微修改你的模型:

public class Product : RealmObject
{
    /* other properties */
    [Backlink(nameof(Invoice.Products))]
    public IQueryable<Invoice> RelatedInvoices { get; }
}

然后您可以像这样查询发票:

var product = realm.All<Product>().FirstOrDefault(p => p.Name == "product 1");
var invoices = product.RelatedInvoices;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多