如果我想要单个原始值,如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();
当然,如果没有返回任何东西,您必须处理可能的异常,但无论如何,您也应该使用列表方法来处理。