2016-08-04 17 views
2

Ich möchte alle Elemente abrufen, bei denen die Modified-Eigenschaft nicht festgelegt ist, aber scheinbar nicht mit Realm arbeiten kann.Wie überprüft man auf NULL-Typen mit Linq-Ausdruck in Realm auf Null?

Beispielcode:

public class FooModel : RealmObject 
{ 
    public DateTimeOffset? Modified { get; set; } 
} 

... 

public List<FooModel> GetAllUnmodified() 
{ 
    var realm = Realm.GetInstance(); 

    //doesn't work 
    var result1 = realm.All<FooModel>().Where(model => model.Modified == null).ToList(); 

    //doesn't work 
    var result2 = realm.All<FooModel>().Where(model => !model.Modified.HasValue).ToList(); 

    //doesn't work 
    DateTimeOffset? testValue = null; 
    var result3 = realm.All<FooModel>().Where(model => model.Modified == testValue).ToList(); 

    //doesn't work 
    var result4 = realm.All<FooModel>().Where(model => model.Modified == default(DateTimeOffset?)).ToList(); 

    return result1; 
} 

immer bekommen System.NotSupportedException: The rhs of the binary operator 'Equal' should be a constant or closure variable expression. oder System.NotSupportedException: The member 'HasValue' is not supported

Habe ich etwas verpasst? Gibt es einen guten Weg zu sehen, was eigentlich von Realms Linq unterstützt wird?

Mit Realm Xamarin v0.77.1 auf Android

EDIT:

Ich habe creating a linq expression tree versuchen, wie durch einen Kommentator vorgeschlagen. Dies führte zu einer System.MissingMethodException: Method 'RealmResults'1.get_Provider' not found. Ausnahme.

+0

Danke für die Anregung. Nachdem ich es versucht hatte, konnte ich es nicht zur Arbeit bringen. Ich bekomme die folgende Ausnahme: 'System.MissingMethodException: Methode 'RealmResults'1.get_Provider' nicht gefunden. '. Es kompiliert also gut, aber wirft einen Fehler zur Laufzeit. – Marc

Antwort

0

Diese Funktion fehlt und hat eine hohe Priorität: #517. Wir sind uns sehr bewusst, dass wir eine Reihe von LINQ-Mängeln haben, wir untersuchen diesen ganzen Bereich und schreiben in Kürze eine Zusammenfassung darüber, welche Funktionen unterstützt werden.

0

Hinweis für alle, die dies später sehen - diese Funktion wurde in der Version 0.77.0 hinzugefügt und ist in der aktuellen Version 0.78.1 enthalten.

Wir unterstützen jetzt den Vergleich mit null.

public class Person : RealmObject 
{ 
    public bool? IsAmbivalent { get; set; } 
... 
_realm.All<Person>().Where(p => p.IsAmbivalent == null); 

Oder für String-Eigenschaften auch Kontrolle:

_realm.All<Person>().Where(p => string.IsNullOrEmpty(p.OptionalAddress)); 

unit tests for more examples Siehe