SQLite Xamarin:查询

时间:2014-10-21 08:12:56

标签: sqlite xamarin

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

1 个答案:

答案 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;