2

我想获取未设置 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.异常。

4

2 回答 2

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

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

于 2016-09-11T18:54:32.953 回答
0

此功能缺失且具有高优先级:#517。我们非常清楚我们有许多 LINQ 缺点,我们正在研究整个领域,包括在不久的将来编写关于支持哪些功能的摘要。

于 2016-08-04T11:19:57.967 回答