我正在使用以下代码从SQLite数据库中的给定表中查询一些数据(平台为WP81,但我想这在这里并不重要)。
当我执行我的代码时,在Where语句中出现了NullReferenceException异常。当我移除where条件时,一切都正常运行。
为了确保我的表中的所有条目都是有效的,并且日期列中没有空值,我使用了一个SQL工具来查看SQLite数据库。
由于我无法调试lambda表达式,所以我有点卡住了,不知道如何解决这个问题。我的假设是由于异步处理出了问题。
编辑: 这里是异常的完整堆栈跟踪信息。
当执行这个语句时,实际上是在ToListAsync()方法而不是Where方法中断了。然而,这也没有帮助。
return await Connection.Table<WorkDay>().Where(wd => wd.Date >= @from && wd.Date <= to).ToListAsync().ConfigureAwait(false);
当我执行我的代码时,在Where语句中出现了NullReferenceException异常。当我移除where条件时,一切都正常运行。
return await Connection.Table<WorkDay>().ToListAsync().ConfigureAwait(false);
为了确保我的表中的所有条目都是有效的,并且日期列中没有空值,我使用了一个SQL工具来查看SQLite数据库。
由于我无法调试lambda表达式,所以我有点卡住了,不知道如何解决这个问题。我的假设是由于异步处理出了问题。
编辑: 这里是异常的完整堆栈跟踪信息。
{System.NullReferenceException: Object reference not set to an instance of an object.
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.GenerateCommand(String selectionList)
at SQLite.Net.TableQuery`1.GetEnumerator()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at SQLite.Net.Async.AsyncTableQuery`1.<ToListAsync>b__0()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
at TimeStamp.Core.Services.DataService.<GetWorkDays>d__c.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at TimeStamp.Core.ViewModel.MainViewModel.<LoadWorkDays>d__1a.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__3(Object state)}
编辑2:
我再进一步尝试并发现以下内容。
var query = Connection.Table<WorkDay>().Where(wd => wd.Date >= @from && wd.Date <= to);
return query.ToListAsync().ConfigureAwait(false);
当执行这个语句时,实际上是在ToListAsync()方法而不是Where方法中断了。然而,这也没有帮助。
后来我尝试了下面的方法,它确实起作用了。
var result = await Connection.Table<WorkDay>().ToListAsync().ConfigureAwait(false);
return result.Where(wd => wd.Date >= @from && wd.Date <= to).ToList();
所以我实际上是将Where方法分离出来。但尽管这对我有效,它并没有回答我的问题,因为我仍然想知道为什么这样做不起作用。