SQLite クエリの例を探しています。さまざまなメソッドとクラス名 (つまり、Open()、SQLiteDataReader、および SQLiteDatabase) が認識されなかったため、SQL で見つけることができたものはコンパイルされませんでした。
ラムダのものはよくわかりません。たとえば、次のようになります。
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 の値の 1 つであり、DateTime フィールドが EarlyToShow と LatestToShow の間にあるすべてのレコードを照会する必要があります。IOW、疑似 SQL は次のようになります。
select * from Platypi で、duckbillId が DuckbillIds で、DateVal が EarliestToShow と LatestToShow の間 (両端を含む)
基本的な SQL の選択、挿入、更新、および削除 (CRUD 操作) の実用的な例をいくつか挙げたいと思います。2 番目に良いのは 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);
}