为什么我不能直接访问财产”.SingleAsync().财产”

本文关键字:财产 SingleAsync 访问 不能 为什么 | 更新日期: 2023-09-27 18:25:48

我的测试代码:

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>' 的参数。

你能解释一下为什么吗?

为什么我不能直接访问财产”.SingleAsync().财产”

SingleAsync 返回一个Task<UserProfileViewModels> 。该任务上没有您的财产。您需要等待任务才能取回实际UserProfileViewModels结果

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

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