列出来自等待任务的<myclass>

时间:2017-09-06 07:05:49

标签: c# database list sqlite async-await

在我的应用程序中,不同的画布存储为&#34;页面&#34;,每个画布的内容存储为&#34;单元格&#34;。

现在当我想加载占用/组成一个画布的所有单元格时,我会像这样检索它们:

public Task<List<Cell>> GetCellsAsync(string uPageGUID)
{
    return database.QueryAsync<Cell>("SELECT * FROM cells WHERE cellpageguid = ?", uPageGUID);
}

这很有效。

现在我想找出&#34; pageguid&#34;页面的值为&#34; pageisstartpage&#34;设置为true。

因此,我尝试以下方法:

public Task<string>GetStartPageGUID()
{
    nPages<List<Page>>=database.QueryAsync<Page>("SELECT * FROM pages WHERE pageisstartpage=?", true);
    return nPages.First.GUID;
}

编译器告诉我:

  

nPages在当前环境中不存在。

我不知道我犯了什么错误。

2 个答案:

答案 0 :(得分:3)

  

当前上下文中不存在nPages ....我看不出我犯了什么错误。

首先要提到的是List<Page>的声明似乎倒退了。

nPages<List<Page>>=database....

必须首先写入类型,然后是变量名。

List<Page> nPagesTask = database...

另一种解释可能是您有一个泛型类型变量nPages,您要在其中指定泛型类型。因此编译器会查看此变量是否已被声明。显然它找不到任何东西。

第二件事如果您有一个返回Task<string>的异步方法,您可以执行以下操作:

public async Task<string>GetStartPageGUID()
{
    Task<List<Page>> nPagesTask = database.QueryAsync<Page>("SELECT * FROM pages WHERE pageisstartpage=?", true);
    List<Page> npages = await nPagesTask;
    return nPages.First().GUID;
}

以下是QueryAsync方法的source。这是签名:

public Task<List<T>> QueryAsync<T> (string query, params object[] args)

所以它返回Task<List<T>>。由于您的方法指定了不同的返回类型,通常的模式是在async方法中等待它,如the MSDN example中所述,然后返回您在方法中指定的类型。

答案 1 :(得分:0)

您必须正确声明nPages:

The following build commands failed:
CompileC build/Build/Intermediates/ArchiveIntermediates/MyApplication/IntermediateBuildFilesPath/MyApplication.build/Release-iphoneos/MyApplication.build/Objects-normal/arm64/com_codename1_io_websocket_WebSocketNativeImplImpl.o MyApplication-src/com_codename1_io_websocket_WebSocketNativeImplImpl.m normal arm64 objective-c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)
Failed xcodebuild step