领域错误:二元运算符'GreaterThan'的lhs应该是成员表达式。

时间:2016-08-28 09:34:00

标签: xamarin realm

我尝试使用以下代码行让所有拥有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; }
}

2 个答案:

答案 0 :(得分:1)

对不起,尚不支持此类查询。我们正在努力改进LINQ覆盖范围,但我担心您将无法在不久的将来执行此特定查询。

在您的情况下可能适用或不适用的两种解决方法:

1)在HasOldDogs课程中添加布尔Person属性。请注意,为了对其执行查询,它必须是持久化属性,因此每当您修改Dogs属性或任何包含的Dog实例时,都必须显式更新它。

2)在内存中执行查询。 var persons = realm.All<Person>().ToList().Where( ... )会奏效。但是,这将使用LINQ to Memory在内存中执行查询,如果没有大量Person个实例,则该查询效果最佳。

如果您可以更详细地描述您的情况需要,我们可能会想出替代方案。

答案 1 :(得分:0)

可能是您必须将查询分解为两个查询而不是一个。

似乎Realm存在一些问题,可能需要Realm团队的某个人解释:)