如何获得单行从SQLite数据库在Windows商店应用程序



如果我想要单个原始值,如int, string, float等,我可以这样做

using (var db = new SQLiteConnection(DbPath))
{
    double i = db.CreateCommand("select salary from PersonMaster where personId = ?", 9).ExecuteScalar<double>();
}

如果我试图返回person master的整个对象,即单行,下面的代码返回null

using (var db = new SQLiteConnection(DbPath))
{
    PersonMaster objPersonMaster = db.CreateCommand("select * from PersonMaster where personId = ?", 9).ExecuteScalar<PersonMaster>();
}

我必须使用这个

using (var db = new SQLiteConnection(DbPath))
{
    List<PersonMaster> lstPersonMaster = db.Query<PersonMaster>("select * from PersonMaster where personId = ?", 9);
    PersonMaster objPersonMaster = lstPersonMaster.First();
}

是否有任何方法获得单行作为对象,而不是处理List<T>

我假设您正在使用SQLite-Net。如果是这种情况,您可以使用Find方法。Find使用主键获取对象

personId字段需要PrimaryKey属性如下:

public class PersonMaster
{
    [PrimaryKey]
    public int personId { get; set; }
    public string name { get; set; }
    public decimal salary { get; set; }
}

那么你可以这样使用Find:

// get person 9
PersonMaster person9 = db.Find<PersonMaster>(9);

您可以使用"TOP(1) yourquery"或"yourquery LIMIT 1"

如果您只是想去掉列表步骤,您可以直接这样做:

PersonMaster objPersonMaster = db.Query<PersonMaster>("select * from PersonMaster where personId = ?", 9).First();

当然,如果没有返回任何东西,您必须处理可能的异常,但无论如何,您也应该使用列表方法来处理。

最新更新