0

我一直在寻找 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);
}
4

1 回答 1

1

根据您的代码示例,我假设您正在使用sqlite-net。尝试查看它的自述文件和文档。有几个使用 SQL 语法的工作示例应该可以帮助您。

I'm not sure which samples you were trying out but the class names you are mentioning are definitely not part of sqlite-net, they sound as if they were from the SQLite ADO.NET provider.

于 2012-11-26T06:04:22.907 回答