c# - 即使数据类型相同,realm.xamarin 也会出现错误 "Data type mismatch"

标签 c# linq xamarin xamarin.forms realm

我正在使用带有 xamarin 表单的 realm.xamarin 0.75,在执行查询时,我收到一个奇怪的错误。查询是

DateTimeOffset fromOffset = new DateTimeOffset(fromDate);
DateTimeOffset toOffset = new DateTimeOffset(toDate);
var config = DependencyService.Get<IDatabase>().GetConfiguration();
using (var realm = Realm.GetInstance(config))
{
    return realm.All<Measurements>()Where(o => o.CreatedDateTime >= fromOffset && o.CreatedDateTime <= toOffset).OrderByDescending(o => o.CreatedDateTime).ToList();
}

错误是:

UNHANDLED EXCEPTION:
06-06 17:46:15.337 I/MonoDroid(26505): Realms.RealmException: Data type mismatch
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.NativeCommon.ExceptionThrower (NativeException exception) [0x00007] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at (wrapper native-to-managed) Realms.NativeCommon:ExceptionThrower (Realms.NativeException)
06-06 17:46:15.337 I/MonoDroid(26505):   at (wrapper managed-to-native) Realms.NativeQuery:timestamp_milliseconds_greater_equal (Realms.QueryHandle,intptr,long)
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResultsVisitor.AddQueryGreaterThanOrEqual (Realms.QueryHandle queryHandle, System.String columnName, System.Object value) [0x000b6] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResultsVisitor.VisitBinary (System.Linq.Expressions.BinaryExpression b) [0x0016c] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.ExpressionVisitor.Visit (System.Linq.Expressions.Expression exp) [0x000d2] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResultsVisitor.VisitCombination (System.Linq.Expressions.BinaryExpression b, System.Action`1 combineWith) [0x00012] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResultsVisitor.VisitBinary (System.Linq.Expressions.BinaryExpression b) [0x0000c] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.ExpressionVisitor.Visit (System.Linq.Expressions.Expression exp) [0x000d2] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResultsVisitor.VisitMethodCall (System.Linq.Expressions.MethodCallExpression m) [0x0006a] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.ExpressionVisitor.Visit (System.Linq.Expressions.Expression exp) [0x000ec] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResultsVisitor.VisitMethodCall (System.Linq.Expressions.MethodCallExpression m) [0x000e6] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.ExpressionVisitor.Visit (System.Linq.Expressions.Expression exp) [0x000ec] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResults`1[T].CreateResultsHandle () [0x00037] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResults`1[T].get_ResultsHandle () [0x0000d] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at Realms.RealmResults`1[T].GetEnumerator () [0x00000] in <filename unknown>:0 
06-06 17:46:15.337 I/MonoDroid(26505):   at System.Collections.Generic.List`1[T]..ctor (IEnumerable`1 collection) [0x00073] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/external/referencesource/mscorlib/system/collections/generic/list.cs:104 
06-06 17:46:15.337 I/MonoDroid(26505):   at System.Linq.Enumerable.ToList[TSource] (IEnumerable`1 source) [0x00011] in /Users/builder/data/lanes/3053/a94a03b5/source/mono/external/referencesource/System.Core/System/Linq/Enumerable.cs:835 

我怀疑 DateTimeOffset 可能导致了这个问题。

我在 https://github.com/realm/realm-dotnet 查看了源代码 但找不到任何东西。

最佳答案

我发现了问题。当 RealmObject(在我的例子中是 Measurements)的类没有直接从 RealmObject 继承时,就会发生这种情况。

我的类 Measurements 是从一个类 BaseModel 继承的(我创建这个类是为了内部目的)而这个 BaseModel 类是从 Realm 对象

当我删除它并使 Measurements 直接从 RealmObject 继承时,我不会抛出异常。

来自 Dimitris Tavlikos 的评论,

Realm Xamarin 不允许模型以任何方式进一步子类化。 CreateObject 泛型方法仅在您将其用于直接从 RealmObject 派生的类时才有效。

https://realm.io/docs/xamarin/latest/#model-inheritance

关于c# - 即使数据类型相同,realm.xamarin 也会出现错误 "Data type mismatch",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37658387/

相关文章:

c# - LINQ 多对多关系 : Solution?

c# - 与另一个列表 LINQ 相比,检查一个列表中有哪些元素

android - 如何知道抽屉导航是否在 Xamarin 中打开?

listview - Xamarin 在点击时禁用闪烁/闪烁的 ListView

c# - Entity Framework 中首先从数据库更新模型的元数据不起作用

c# - StreamWriter 中的特殊字符

c# - 按集合查询集合的 lambda 表达式

android - 如何从 imageView Android 中获取位图的真实坐标(X,Y)

c# - 处理横切问题,例如 Web 应用程序组件的内部统计报告

c# - 使用 javascript 打印图像时出现问题