【问题标题】:QueryAsync returning nothing for ID column (auto number column)QueryAsync 不返回任何 ID 列(自动编号列)
【发布时间】: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 列。

【问题讨论】:

  • IdNameStudentID 属性吗?如果将SELECT StudentID 更改为SELECT StudentID as ID 会发生什么?
  • 投票结束为错字。

标签: c# sqlite xamarin.forms


【解决方案1】:

我猜我的返回数据类型 IdName 必须具有与我的表中的列名完全相同的名称的变量。我认为变量可以是任何名称,但我试过了,它解决了问题

public class IdName
{
    public int StudentID { get; set; }
    public string Name { get; set; }
}

感谢 mjwills 帮助我找到解决方案。

【讨论】:

  • 感谢分享,别忘了采纳哦~
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2014-04-01
  • 1970-01-01
相关资源
最近更新 更多