2

如果我想要单个原始值,例如int,等stringfloat我可以这样做。

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

如果我尝试返回人主的整个对象,即单行,则以下代码返回 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>

4

3 回答 3

2

我假设您正在使用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);
于 2013-06-11T13:00:14.403 回答
1

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

于 2013-06-11T12:10:31.643 回答
0

如果你只是想摆脱列表步骤,你可以直接这样做:

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

当然,如果没有返回任何内容,您必须处理可能的异常,但无论如何您也应该使用列表方法来执行此操作。

于 2013-06-11T12:08:52.827 回答