'u atar Bir SQLite veritabanındaki belirli bir tablodan bazı verileri sorgulamak için aşağıdaki kod satırını kullanıyorum (platform WP81'dir ama sanırım bu önemli değil).SQLite.net tablo sorgusu NullReferenceException
return await Connection.Table<WorkDay>().Where(wd => wd.Date >= @from && wd.Date <= to).ToListAsync().ConfigureAwait(false);
Kodumu çalıştırdığımda, Where cümlede bir NullReferenceException alıyorum. Nerede her şeyin iyi çalıştığını kaldırdığımda. benim tablodaki tüm kayıtlar geçerlidir ve ben SQLite veritabanına bakmak için bir SQL aracı kullanılan Tarihi sütunundaki hiçbir boş değer olmadığından emin olmak için
return await Connection.Table<WorkDay>().ToListAsync().ConfigureAwait(false);
.
Lambda ifadelerinde hata ayıklayamadığım için, sorunu nasıl bulacağımı bilmiyorum. Benim varsayımım, async kullanımından dolayı bir şeylerin yanlış gitmesi.
Düzenleme:
Daha biraz etrafına oynanan ve aşağıdaki anladım: Burada istisna
{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)}
Düzenleme 2'nin tam StackTrace olduğunu.
var query = Connection.Table<WorkDay>().Where(wd => wd.Date >= @from && wd.Date <= to); return query.ToListAsync().ConfigureAwait(false);
aslında yerine nerede yöntemin ToListAsync() yönteminde kırar bu deyimi yürütme. Ancak, bu da işe yaramıyor. Daha sonra çalışmakta olan aşağıdakileri denedim. var result = await Connection.Table<WorkDay>().ToListAsync().ConfigureAwait(false);
return result.Where(wd => wd.Date >= @from && wd.Date <= to).ToList();
Yaptığım şey, aslında Nerede yöntemini ayırmaktır. Ama bu benim için işe yarıyorsa da, soruma cevap vermiyor çünkü neden bunun işe yaramadığını merak ediyorum.
"NRE, nerede" cümlesi ile kastediliyor? Aslında bir ifade ağacında toplanıyor ve bu şekilde işleniyorsa, lambda'nın kendi başına bir istisna atması mümkün olmamalı, sadece onu işleyen kod. Aslında "ToListAsync" den önce bir istisna var mı, yoksa sadece "Nereden Çıkarsam, bunun bir istisnası yok" mu demek istediniz? –
'from' ve' to' değişkenleri tanımlanmış mı? Ben de '' '' in '' ''inin olmadığını görüyorum. ve 'WorkDay' içinde null 'Date's var mı? – MPelletier
@MPelletier Evet. Hata ayıklayıcısını kullanarak, hem değer hem de bir değeri olup olmadığını kontrol ettim. from @ değerine sahiptir, çünkü C# içinde bir anahtar kelimedir ve bu nedenle bu isimle bir değişkenin kullanılmasına genellikle izin verilmez. – Stephan