我尝试使用以下代码行让所有拥有10岁以上狗的人:
var persons = realm.All<Person>()
.Where(person => person.Dogs.Count(dog=>dog.Age > 10) > 0);
但我收到了这个错误:
System.NotSupportedException:
The lhs of the binary operator 'GreaterThan' should be a member expression.
Unable to process `person.Dogs.Count(dog => (dog.Age > 10))`
这是否意味着我们无法过滤Realm
中的关系?
以下是我从Realm documentation复制的模型:
public class Dog : RealmObject
{
public string Name { get; set; }
public int Age { get; set; }
public Person Owner { get; set; }
}
public class Person : RealmObject
{
public string Name { get; set; }
public IList<Dog> Dogs { get; }
}
答案 0 :(得分:1)
对不起,尚不支持此类查询。我们正在努力改进LINQ覆盖范围,但我担心您将无法在不久的将来执行此特定查询。
在您的情况下可能适用或不适用的两种解决方法:
1)在HasOldDogs
课程中添加布尔Person
属性。请注意,为了对其执行查询,它必须是持久化属性,因此每当您修改Dogs
属性或任何包含的Dog
实例时,都必须显式更新它。
2)在内存中执行查询。 var persons = realm.All<Person>().ToList().Where( ... )
会奏效。但是,这将使用LINQ to Memory在内存中执行查询,如果没有大量Person
个实例,则该查询效果最佳。
如果您可以更详细地描述您的情况需要,我们可能会想出替代方案。
答案 1 :(得分:0)
可能是您必须将查询分解为两个查询而不是一个。
似乎Realm存在一些问题,可能需要Realm团队的某个人解释:)