为什么我不能直接访问属性" .SingleAsync()。属性"?

时间:2015-12-05 08:04:01

标签: 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>'不包含定义   'PictureUrl'并且没有扩展方法'PictureUrl'接受第一个   可以找到'Task<UserProfileViewModels>'类型的参数。

你能解释一下为什么吗?

1 个答案:

答案 0 :(得分:8)

SingleAsync返回Task<UserProfileViewModels>。这项任务没有你的财产。您需要等待任务返回实际的UserProfileViewModels结果

告诉编译器你想要结果的属性而不是你需要在括号中包围await表达式的任务:

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