簡體   English   中英

查詢表只返回null返回sqlite-net-pcl中的列表

[英]Querying a table only returns null to a list in sqlite-net-pcl

所以我一直在嘗試圍繞sqlite-net-pcl進行操作,但這似乎無法更新狀態...在嘗試使用測試字符串進行了一些定位以將問題本地化之后,它從第一個列表開始似乎只用0填充,因此我已將其恢復到原來的位置。

public async Task UpdateStatus()
    {
        var ObjectIDList = await database.QueryAsync<long>("SELECT ObjectID FROM Object WHERE ObjectStatus = 0 OR ObjectStatus = 1");
        if (ObjectIDList != null)
        {
            foreach (long ObjectID in ObjectIDList)
            {
                byte newStatus = 5;
                var result = await database.Table<Object>().Where(i => i.ObjectID == ObjectID).FirstOrDefaultAsync();
                if (result != null)
                {
                    result.Objectstatus = newStatus;
                    await SaveObjectAsync(result);
                }
            }
        }
    }

無論表中有多少個條目,只要對象的狀態值中有0或1,它就會用另一個0填充列表。

為什么即使我在數據庫中有許多記錄的ObjectStatus = 0 or ObjectStatus = 1 ObjectIDList總是返回零? 如果我有5條記錄,那么它將返回5個結果,但返回零而不是實際的ObjectID

我查看了源代碼,這就是SQLite的作用。 假設您有這樣的查詢:

var ObjectIDList = await database.QueryAsync<long>("SELECT ObjectID FROM 
    Object WHERE ObjectStatus = 0 OR ObjectStatus = 1");

SQLite將對數據庫執行查詢,並創建您傳遞給QueryAsync<T>T的實例。 您傳遞了一個long因此它將創建一個新的long 然后它將嘗試在實例中填充一個名為ObjectID的屬性。 但是很顯然,由於long沒有一個名為ObjectID的屬性,因此無法填充它。 SQLite不會拋出異常來告訴您這一點。 它只是繼續,最后得到一堆新創建的long 默認情況下,所有long都設置為零。 這就是為什么在ObjectIDList中獲得全零的原因。

查看從119行開始的源代碼。 我個人認為這是一個糟糕的設計,在這種情況下,他們應該只返回long的列表。

固定

因此,要解決此問題,您需要創建一個具有ObjectID作為屬性的新類,或者使用已經擁有的類: Object (這不是.net Object類型,而是您自己的自定義類型)。 因此,您的查詢將變為:

var ObjectIDList = await database.QueryAsync<Object>("SELECT ObjectID FROM 
    Object WHERE ObjectStatus = 0 OR ObjectStatus = 1");

然后執行以下操作:

List<long> ids = ObjectIDList.Select(x => x.ObjectID).ToList();

現在循環瀏覽並完成您的工作:

foreach(long thisObjectId in ids)
{
    // code...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM