【发布时间】:2020-10-02 20:05:14
【问题描述】:
我有一个带有 SQLite 数据库的 Xamarin.Forms 应用程序。我在尝试使用 QueryAsync 从自动递增列中检索值时遇到问题。函数如下所示:
public async Task<Dictionary<int, string>> GetDicIDsNames()
{
List<IdName> idNamesList = await db.QueryAsync<IdName>("SELECT StudentID, Name FROM [Student]");
Dictionary<int, string> dicIDsNames = new Dictionary<int, string>();
foreach (IdName item in idNamesList)
{
dicIDsNames.Add(item.id, item.name);
}
return dicIDsNames;
}
该函数的目标是返回学生 ID 和姓名的字典。当我在代码中设置断点时,我能够看到第一行代码用所有学生姓名填充idNamesList,但所有 ID 都是 0,我不知道为什么。
我有一个 Student 类/表,其定义如下:
public class Student
{
[PrimaryKey, AutoIncrement]
public int StudentID { get; set; }
public string Name { get; set; }
....
}
还有其他字段,但我会将它们排除在外,因为它们与问题无关。 这是我为处理返回值而创建的一个简短的“IdName”类:
public class IdName
{
public int id { get; set; }
public string name { get; set; }
}
另一种奇怪的事情是,当我查询数据库并返回完整的学生对象时,StudentID 属性被正确返回/设置。我可以轻松地返回表中的每个学生,然后循环从那里提取 id 和 name 字段,但这会非常低效。
为什么会返回 0 或 null 值?或者,如果有一种方法可以按索引选择列,因为我只需要表中的前 2 列。
【问题讨论】:
-
IdName有StudentID属性吗?如果将SELECT StudentID更改为SELECT StudentID as ID会发生什么? -
投票结束为错字。
标签: c# sqlite xamarin.forms