c# - 为什么我不能直接访问属性 ".SingleAsync().Property"?

标签 c# .net async-await

我的测试代码:

using (var db = new MyDbContext())
{
  string id = "";
  string pictureUrl = db.UserProfile.Single(x => x.Id == id).PictureUrl; //valid syntax

  var user = await db.UserProfile.SingleAsync(x => x.Id == id); //valid syntax
  string _pictureUrl = user.PictureUrl; //valid syntax
}

我的问题是:我不能直接声明 pictureUrl像这样:

string pictureUrl = await db.UserProfile.SingleAsync(x => x.Id == id).PictureUrl;

我试过这样做,但它向我抛出错误信息:

'Task<UserProfileViewModels>' does not contain a definition for 'PictureUrl' and no extension method 'PictureUrl' accepting a first argument of type 'Task<UserProfileViewModels>' could be found.

你能解释一下为什么吗?

最佳答案

SingleAsync返回 Task<UserProfileViewModels> .该任务没有您的属性(property)。您需要等待任务才能取回实际的 UserProfileViewModels结果

要告诉编译器您需要结果的属性而不是任务,您需要将 await 表达式括在括号中:

string pictureUrl = (await db.UserProfile.SingleAsync(x => x.Id == id)).PictureUrl;

关于c# - 为什么我不能直接访问属性 ".SingleAsync().Property"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34102697/

相关文章:

c# - 使用 C# 更改 sql server express 的 tcp/ip 端口

c# - 为以大写字母开头的gridview的所有单元格值添加背景色

c# - 在 Visual Studio 中调试第三方 DLL?

.net - 创建一个datagridview单元格,其中可以包含几个可单击的链接?

c# - 如何正确编写自定义任务返回方法

c# - 如何处理使 UI 无响应的同步(阻塞)调用

c# - 使用 Interop.Word,有没有办法进行替换(使用 Find.Execute)并保持原始文本的对齐方式?

c# - 更改正在监听的对象时是否需要删除事件监听器?

.net - 贵公司如何部署其软件?

c# - .Net 中的文件操作是否有异步替代方案?