【问题标题】:How can I make this SQLite query using the SQLite WP8.1 lib?如何使用 SQLite WP8.1 库进行此 SQLite 查询?
【发布时间】:2015-04-23 16:26:25
【问题描述】:

我正在使用 SQLite for Windows Phone 8.1 库,但无法使用 QueryAsync 方法。

假设我有一个名为“Items”的表,其结构如下:

  • 身份证
  • 父母ID
  • [其他数据列...]

给定一行,我想获取目录树中以该行为树根的元素总数。

我的意思是,在伪代码中:

CountItems(rootID)
total = 0
children = SQLQuery(SELECT ID FROM Items WHERE ParentID = rootID)
foreach (id in children)
    total += CountItems(id)
return total

现在,我找不到使用 SQLite 库让这个查询工作的方法。 我使用 DB Browser for SQLite 测试了查询,它似乎可以工作,但我无法在 WinRT 中恢复该列表。

这是我尝试过的:

public static async Task<int> CountContainedItemsAsync(int rootID)
{
    int total = 0;
    List<int> childrenIDs = await DatabaseConnection.QueryAsync<int>("SELECT ID FROM Items WHERE ParentID = ?", rootID);
    foreach (int childID in childrenIDs)
    {
        total += await CountContainedItemsAsync(childID);
    }
    return total;
}

问题:由于某种原因,例如,如果我在一个有 4 个子项的文件夹上调用此方法,则 childrenIDs 会变成一个具有 4 个 0 的列表,而不是包含元素的 4 个 ID。 p>

如果我使用 QueryAsync 而不是:

List<Item> test = await DatabaseConnection.Table<Item>().Where(item => item.ParentID == rootID).ToListAsync();

我得到了 4 个项目的列表,它工作正常,但问题是我不想使用这种方法来避免浪费内存,我只想要在每个递归调用中包含子 ID 的列表。

我是否在 QueryAsync 方法中使用了遗漏的东西?

感谢您的帮助!

塞尔吉奥

【问题讨论】:

    标签: c# sqlite windows-runtime windows-phone-8.1 win-universal-app


    【解决方案1】:

    如果您只想检索 ID,那么您必须选择类似:

    var lst = await DatabaseConnection.Table<Item>().Where(x=>x.ParentID).Select(x=>x.ID).ToListAsync(); 
    

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2012-06-20
      • 2018-11-14
      相关资源
      最近更新 更多