2016-12-14 34 views
0

我有2类:如何查询带有Realm(v0.80)的Xamarin dotnet的RealmList?

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")); 

我试过任何我能想到的东西,但它不起作用。

任何帮助是受欢迎的,因为列出所有产品的计数,它包含在多少发票真的需要永远。

+0

这看起来相关:http://stackoverflow.com/questions/40330887/realm-xamarin -linq-object/40331608#40331608 – EpicPandaForce

+0

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

回答

0

使用最新版本(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;