我是SQLite的新手。
我想查询我的SQLite数据库以获取多行。
当我在本地数据库中添加新项目时,我将此方法称为Add
:
public bool Add<T>(string key, T value)
{
return this.Insert(new SQliteCacheTable(key, this.GetBytes(value))) == 1;
}
_simpleCache.Add("favorite_1", data1);
_simpleCache.Add("favorite_2", data2);
_simpleCache.Add("favorite_3", data2);
然后,
我想从本地数据库检索键以“ favorite_”开头的所有条目
返回数据库中所有属于“收藏夹”对象的对象。
我对Linq很有经验,我想做这样的事情:
IEnumerable<Element> = repository.Find((element) => element.Key.StartWith("favorite_"))
在
SQLiteConnection
类中,有一个像这样的方法:SQLite.Net.SQLiteConnection.Find<T>(System.Linq.Expressions.Expression<System.Func<T,bool>>)
但是我也希望in返回集合
IEnumerable<T>
。你能帮我吗?
谢谢。
乔尔
最佳答案
您必须在表本身而不是连接上建立查询:
假设:
SQLiteConnection repository;
然后代码如下所示:
var favorites = repository.Table<SQliteCacheTable>().Where(item => item.StartsWith("favorite_"));
尽管
favorites
变量的类型为TableQuery<SQliteCacheTable>
,所以它尚不包含您的数据。实际的SQL查询将推迟执行,直到您尝试访问结果为止(例如,通过foreach
枚举或使用ToList
转换为列表)。要实际观察数据库中发生的情况,可以通过在
repository.Trace = true
对象上设置SQLiteConnection
来打开sqlite-net中的跟踪。最后,值得一提的是,如果您愿意的话,还可以在
TableQuery<T>
对象上使用C#查询语法。因此,您的查询可能变为:var favorites = from item in repository.Table<SQliteCacheTable>()
where item.StartsWith("favorite_")
select item;
关于sqlite - SQLite Xamarin:查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26481860/