我一直在寻找 SQLite 查询示例。我能够在 SQL 中找到的那些无法编译,因为无法识别各种方法和类名(即 Open()、SQLiteDataReader 和 SQLiteDatabase)。
Lambda中的那些我不太明白。例如,这个:
public Task<List<Platypi>> GetAllLocationsAsync()
{
return new SQLiteAsyncConnection(SQLitePath).Table<Platypi>().ToListAsync();
}
...大概通过返回的列表返回 Platypi 表中的每条记录。但我不想要全部,我想限制/过滤记录;这是一个开始,我猜:
private async Task<List<Platypi>> GetLocationsForPeopleAndTimeRange(List<string> DuckbillIds, DateTime EarliestToShow, DateTime LatestToShow)
{
SQLiteAsyncConnection conn = new SQLiteAsyncConnection(SQLitePath);
var query = conn.Table<Locations>().Where(x => x.DuckbillId // ? what now ?
return await query.ToListAsync();
}
...但我不知道如何构造 Where() 子句。我需要查询所有记录,其中 DuckbillId 是 DuckbillIDs 中的值之一,并且 DateTime 字段介于 EarliestToShow 和 LatestToShow 之间。IOW,伪 SQL 将类似于:
从 Platypi 中选择 *,其中 DuckbillIds 中的 DuckbillId 和 DateVal 介于 EarliestToShow 和 LatestToShow 之间
我更喜欢基本 SQL 选择、插入、更新和删除(CRUD 操作)的一些工作示例;第二好的是 Lambda,它的语法对我来说似乎很复杂。
LINQ 也可以。
更新
我在 SQLite-Net 的页面 (http://code.google.com/p/sqlite-net/) 上找到了一些示例,这些示例导致我这样做,至少可以编译:
public List<Locations> GetLocationsForPlatypiAndTimeRange(List<string> PlatypiIds, DateTime EarliestToShow,
DateTime LatestToShow)
{
var db = new SQLite.SQLiteConnection(SQLitePath);
StringBuilder sb = new StringBuilder();
foreach (String s in PlatypiIds)
{
sb.Append(string.Format("{0},", s));
}
sb.Remove(sb.Length - 1, 1); // remove the superfluous trailing comma
return
db.Query<Locations>(
"Select * from Locations Where PlatypusId in (?) and SentTimeLocal >= ? and SentTimeLocal <= ? Order by SentTimeLocal",
sb.ToString(), EarliestToShow, LatestToShow);
}