我是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/

10-11 23:19
查看更多