2016-08-28 3 views
1

私は次のコード行使用して10以上の犬を持っている全ての人が年を取ることを試みた:レルムエラー:バイナリ演算子 'GreaterThan'のlhsはメンバ式でなければなりません。

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にしますか?

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

LINQのサポート:https://github.com/realm/realm-dotnet/blob/d83bb320189421924933c9a7160b9bf307a48861/Doxygen/linq-support.md – SushiHangover

答えて

0

次の2つのクエリの代わりの1にクエリを分割する必要がありことがあります。ここ

は私がRealm documentationからコピーしたモデルです。

を説明するレルムチームの誰かを必要とするかもしれないレルムといくつかの問題があるようです:)

1

申し訳ありませんうん、クエリのこのタイプはまだサポートされていません。私たちはLINQカバレッジの改善に取り組んでいますが、近いうちにこの特定のクエリを実行することはできません。

1)あなたのPersonクラスにブールHasOldDogsプロパティを追加しますかあなたの状況に適用してもしなくてもよい

2つの回避策。クエリを実行するには、永続プロパティである必要があります。したがって、Dogsプロパティまたは含まれているDogインスタンスのいずれかを変更するたびに明示的に更新する必要があります。

2)メモリ内でクエリを実行します。 var persons = realm.All<Person>().ToList().Where(...)が動作します。ただし、大量のPersonインスタンスが存在しない場合に最適なLINQ to Objectsオブジェクトを使用してクエリを実行します。

あなたの状況が必要とするものをさらに詳しく記述することができれば、代替案を考え出すことができます。レルムXamarinで

+0

それは、Androidのために 'レルム-Java'を使用して、それがサポートされていないことを奇妙です[link queries](https://realm.io/docs/java/)で 'realm.where(Person.class).greaterThan(" dogs.age "、10).findAll();と言うことができます。最新版/#link-queries) – EpicPandaForce

+0

@EpicPandaForceはい、Realmコアがサポートしていないからではありません.Realm Xamarin SDKが少し遅れているからです。 :-) –

関連する問題