访问从 SQLite 数据库返回的字符串任务的字段会出错

Posted

技术标签:

【中文标题】访问从 SQLite 数据库返回的字符串任务的字段会出错【英文标题】:Accessing fields of a string task returned from SQLite Database is giving errors 【发布时间】: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' 更新帖子以包含此内容 【参考方案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 中调用函数时,我会使用它吗?

以上是关于访问从 SQLite 数据库返回的字符串任务的字段会出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 从 sqlite 3 数据库中检索存储在整数字段中的字符串数据

从 2 个不同片段的 sqlite 中的 2 个表中获取信息

从片段访问数据库以在列表中显示

从popover返回后如何在collectionview单元格中填充文本字段

访问:如何从表中检索某个字段并返回?

Sqlite 返回值与数据库不同