我是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>>)
但我希望在返回集合IEnumerable<T>
时也一样。
你能帮我吗?
谢谢。
Jool
答案 0 :(得分:3)
您必须在表本身上构建查询,而不是连接:
假设:
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;