C# 如何在领域中使用Linq表达式检查可空类型上的null?

C# 如何在领域中使用Linq表达式检查可空类型上的null?,c#,linq,xamarin,realm,realm-net,C#,Linq,Xamarin,Realm,Realm Net,我想获取所有未设置修改属性但似乎无法使其与领域一起工作的元素 示例代码: public class FooModel : RealmObject { public DateTimeOffset? Modified { get; set; } } ... public List<FooModel> GetAllUnmodified() { var realm = Realm.GetInstance(); //doesn't work var result1 = r

我想获取所有未设置修改属性但似乎无法使其与领域一起工作的元素

示例代码:

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;
}
公共类FooModel:RealmObject
{
公共DateTimeOffset?已修改{get;set;}
}
...
公共列表GetAllUnmodified()
{
var realm=realm.GetInstance();
//不起作用
var result1=realm.All().Where(model=>model.Modified==null.ToList();
//不起作用
var result2=realm.All().Where(model=>!model.Modified.HasValue).ToList();
//不起作用
DateTimeOffset?testValue=null;
var result3=realm.All().Where(model=>model.Modified==testValue.ToList();
//不起作用
var result4=realm.All().Where(model=>model.Modified==default(DateTimeOffset?).ToList();
返回结果1;
}
始终获取
System.NotSupportedException:二进制运算符“Equal”的rhs应为常量或闭包变量表达式。
System.NotSupportedException:不支持成员“HasValue”

我错过什么了吗?有没有一个好的方法来查看Realm的Linq实际上支持什么

在Android上使用领域Xamarin v0.77.1

编辑:


我确实按照一位评论员的建议做了尝试。这导致出现
System.MissingMethodException:找不到方法'RealmResults'1.get_Provider'。
异常。

此功能缺失且优先级较高:。我们非常清楚,我们有许多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);
公共类人物:RealmObject
{
公共布尔?IsAmbivalent{get;set;}
...
_realm.All().Where(p=>p.IsAmbivalent==null);
或者,对于字符串属性,还要检查:

_realm.All<Person>().Where(p => string.IsNullOrEmpty(p.OptionalAddress));
\u realm.All().Where(p=>string.IsNullOrEmpty(p.OptionalAddress));

请参阅

谢谢您的建议。尝试后,我无法使其正常工作。我遇到以下异常:
System.MissingMethodException:Method'RealmResults'1.get_Provider'未找到。
。因此它编译良好,但在运行时抛出错误。