我想获得修改属性未设置的所有元素,但似乎无法使其与Realm一起使用。
示例代码:
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;
}
始终获得System.NotSupportedException: The rhs of the binary operator 'Equal' should be a constant or closure variable expression.
或System.NotSupportedException: The member 'HasValue' is not supported
我错过了什么吗?有没有一种好方法可以看到Realm的Linq实际支持什么?
在Android上使用Realm Xamarin v0.77.1
修改
我按照评论者的建议尝试creating a linq expression tree。这导致System.MissingMethodException: Method 'RealmResults'1.get_Provider' not found.
例外。
答案 0 :(得分:0)
此功能缺失且具有高优先级:#517。我们非常清楚我们有许多LINQ缺点,我们正在研究整个领域,包括在不久的将来编写关于支持哪些功能的摘要。
答案 1 :(得分:0)
请注意,以后会有人看到此功能 - 此功能已在版本0.77.0中添加,并且在当前的0.78.1中有效。
我们现在支持与null进行比较。
public class Person : RealmObject
{
public bool? IsAmbivalent { get; set; }
...
_realm.All<Person>().Where(p => p.IsAmbivalent == null);
或者,对于字符串属性,还要检查:
_realm.All<Person>().Where(p => string.IsNullOrEmpty(p.OptionalAddress));