即使相同的数据类型,realm.xamarin也会出现错误“数据类型不匹配”

时间:2016-06-06 13:10:21

标签: 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的源代码 但找不到任何东西。

1 个答案:

答案 0 :(得分:3)

我发现了这个问题。当RealmObject(在我的情况下为Measurements)的类不是直接从RealmObject继承时,就会发生这种情况。

我的班级Measurements继承自班级BaseModel(我为内部目的创建了此类),此BaseModel班级继承自RealmObject

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

来自Dimitris Tavlikos的评论,

Realm Xamarin不允许以任何方式进一步对模型进行子类化。 CreateObject泛型方法仅适用于直接从RealmObject下降的类。

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