【问题标题】:"Date type mismatch" RealmException in LINQ queryLINQ 查询中的“日期类型不匹配”RealmException
【发布时间】:2017-10-12 20:09:11
【问题描述】:

我在使用 Realm Xamarin (C#) 进行 LINQ 查询时遇到问题。

在创建以下类并尝试获取 Person 为 null 的所有 DogModel 对象时,我收到“日期类型不匹配”RealmException:

public class DogModel : RealmObject
{
    [PrimaryKey]
    public long Id { get; set; }
    public PersonModel Owner { get; set; }
}

public class PersonModel : RealmObject
{
    [PrimaryKey]
    public long Id { get; set; }
}

var p1 = new PersonModel();
p1.Id = 1;

var d1 = new DogModel();
d1.Id = 1;
d1.Owner = p1;

var d2 = new DogModel();
d2.Id = 2;
d2.Owner = null;

var _realm = Realm.GetInstance();
_realm.Write(() =>
{
    _realm.Add(p1, true);
    _realm.Add(d1, true);
    _realm.Add(d2, true);
});

var data1 = Realm.GetInstance().All<DogModel>()
    .ToList(); // This works

var data2 = Realm.GetInstance().All<DogModel>()
    .Where(x => x.Owner == null)
    .ToList(); // This does not work

在第二个 LINQ 查询中,我希望得到一个包含 1 个项目(ID 为 2 的 DogModel)的列表,但会引发“日期类型不匹配”RealmException。

为什么会这样?有什么办法吗?

【问题讨论】:

  • 将 OwnerId 存储为可以为空的 long 而不是复杂的 Owner 对象可能会更好。然后检查 OwnerId 是否为空。
  • 这是可能的,但它似乎是一种笨拙的解决方案。它应该可以工作,对吧?这对我来说似乎是一个错误......

标签: c# linq xamarin realm


【解决方案1】:

2017 年 11 月 14 日更新:已通过 Realm .NET 2.1.0 发布了针对此问题的修复程序。

这确实是 Realm Xamarin SDK 中的一个错误。我已经打开了一个问题来跟踪它:https://github.com/realm/realm-dotnet/issues/1596。目前没有解决方法,但您是对的 - 修复后,它应该可以正常工作而无需添加额外的属性。

【讨论】:

  • 太棒了!感谢您如此迅速地对此作出回应:-)