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

时间:2016-08-04 09:44:00

标签: c# linq xamarin realm realm-net

我想获得修改属性未设置的所有元素,但似乎无法使其与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.例外。

2 个答案:

答案 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));

请参阅unit tests for more examples