如何在Realm中使用Linq表达式在Nullable类型上检查null
本文关键字:类型 Nullable 检查 null 表达式 Realm Linq | 更新日期: 2023-09-27 18:00:06
我想获得所有未设置Modified属性但似乎无法使其与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
编辑:
我确实试着按照一位评论者的建议创建了一个linq表达式树。这导致了System.MissingMethodException: Method 'RealmResults'1.get_Provider' not found.
异常。
此功能缺失且具有高优先级:#517。我们非常清楚我们有许多LINQ的缺点,我们正在研究整个领域,包括在不久的将来写一篇关于支持哪些功能的摘要。
请注意,稍后看到这一功能的人会注意,该功能是在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));
有关更多示例,请参阅单元测试