【发布时间】:2012-11-21 12:08:07
【问题描述】:
在下面注释掉的行中,PlatypusId 是红色的/无法识别,尽管它确实存在于相应的表中。
在对 queryResult 的多行跨越赋值中,PlatypusId、where 和 count 为红色/无法识别。
//var queryResult = await conn.Table<PlatypiRequested>().CountAsync().(x => x.PlatypusId.Equals(personId));
var queryResult = from p in PlatypiRequested
where p.PlatypusId.Equals(platypusId)
select count;
IOW,当我添加这个时:
var conn = new SQLiteAsyncConnection(SQLitePath);
var queryResult = await conn.Table<PlatypiRequested>().CountAsync().(x => x.
...在“x => x”之后没有任何可能性。
查询我的 SQLite 表需要什么样的代码?
我正在使用 SQLite-net 包/扩展,但它的文档(什么文档?)并不过分冗长。纵观 SQLite.cs 和 SQLiteAsync.cs,我一点也不聪明……
更新
好的,Harvey 先生的回答评论让我找到了这个工作代码(Count() 不可用,只有 CountAsync()):
public async Task<bool> PlatypusAlreadyAdded(string platypusId)
{
var conn = new SQLiteAsyncConnection(SQLitePath);
var queryResult = await conn.Table<PlatypiRequested>().Where(x => x.PlatypusId == platypusId).CountAsync();
return queryResult > 0;
}
正如 Jackie DeShannon(与我无关,AFAIK)所唱的那样,“世界现在需要的是“用于 C# Windows Store 应用程序的 SQLite/SQLite-net”一书(或者至少是一篇冗长/内容丰富的博文,包含所有常见类型的 SQL 语句 (CRUD) 的示例)。
【问题讨论】:
-
我认为你真正要找的是
var queryResult = await conn.Table<PeopleRequested>().Where(x => x.someField == someValue).CountAsync();你的方法行不通,因为最后一个.运算符期待一个方法调用,而不是一个左括号或 lambda表达。 -
听起来很有希望,但这: var queryResult = await conn.Table
(x => x.PlatypusId == platypusId).CountAsync(); ...仍然无法识别 x.PlatypusId,并且我收到错误消息,“方法 'Table' 没有重载需要 1 个参数。 -
我在您输入评论时编辑了我的评论。 :) 请注意,如果您使用
await,您可能不需要 Count() 的异步版本(或 SQLite 中的任何其他异步函数),因为await已经在幕后为您修改了代码使其异步。 -
另请注意,
Count()扩展方法有an overload,它将条件作为参数。 -
让它成为答案而不是评论,我会这样标记它。
标签: c# linq sqlite windows-store-apps sqlite-net