【问题标题】:Accessing fields of a string task returned from SQLite Database is giving errors访问从 SQLite 数据库返回的字符串任务的字段会出错
【发布时间】:2021-05-30 23:19:26
【问题描述】:

在我的 Xamarin 应用程序中,我使用 SQLite 设置了一个本地数据库。我在设置时遵循了 microsoft 待办事项列表示例 (https://docs.microsoft.com/en-gb/xamarin/xamarin-forms/data-cloud/data/databases),但是我遇到了一个问题。

我有一个名为“Animal”的模型,它保存在我的数据库中,我正在尝试查询以下字段:

    public int ID { get; set; }

    public string Name {get; set; }
    
    public string Species { get; set; }
  
    public string Markings { get; set; }
   
    public string Diet { get; set; }

在我的数据库查询文件中,我正在尝试执行一个查询,该查询将根据用户给出的动物名称获取动物,然后从中返回其标记/饮食/等... 这是我目前所拥有的,但它出错了,我真的不确定如何修复它:

    public async Task<string> getanimaldiet(string name)
    {
        
            Animal a = Database.Table<Animal>().Where(x => x.Name == name).FirstOrDefaultAsync();
            return a.Diet;


    }

错误: 当前上下文中不存在名称“饮食”并且无法将类型“System.Threading.Tasks.Task”隐式转换为“animalService.Animal”

非常感谢任何帮助。

【问题讨论】:

  • 你有什么错误?
  • 当前上下文中不存在名称 'diet' 并且无法将类型 'System.Threading.Tasks.Task' 隐式转换为 'animalService.Animal' 更新帖子以包含此内容

标签: c# sqlite xamarin


【解决方案1】:

由于您有异步 api,因此您需要在代码中添加等待:

 Animal a =  await Database.Table<Animal>().Where(x => x.Name == name) 
               .FirstOrDefaultAsync();

            return a.Diet;

你可以让它同步:

public string getanimaldiet(string name)
    {
      
Animal a =   Database.Table<Animal>().Where(x => x.Name == name) 
               .FirstOrDefault();

            return a.Diet;
)

【讨论】:

  • 谢谢!然后我将如何将返回的内容转换为字符串而不是类型 System.threading.task.task?
  • 使用FirstOrDefault而不是FirstOrDefaultAsync
  • 当我在另一个文件@Jason 中调用函数时,我会使用它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 2014-06-02
相关资源
最近更新 更多