【发布时间】: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