如何在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.异常。

如何在Realm中使用Linq表达式在Nullable类型上检查null

此功能缺失且具有高优先级:#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));

有关更多示例,请参阅单元测试