【问题标题】:SQLite Xamarin Forms Database Table to ListViewSQLite Xamarin 将数据库表转换为 ListView
【发布时间】:2019-05-28 07:11:09
【问题描述】:

您好,我目前正在尝试在 Android 基础应用程序中显示表格。但是,我的问题是:

var db = new SQLiteAsyncConnection(Database.DatabasePath.DB_Path);
            foreach ( var N in db.Table<Database.Inventory>() )
            {

              InventoryItems.Add(new Store_Listing { Id = N.Id, 
              Description = N.Description, Style = N.Style });

这部分代码出错:

foreach 语句不能对“AsyncTableQuery”类型的变量进行操作,因为“AsyncTableQuery”不包含“GetEnumerator”的公共实例

foreach ( var N in db.Table<Database.Inventory>() ) "

我查看了 Database.Inventory 类,它设置为公共类,所有元素都与 SQLite 数据库(类型 3)表完全相同。

老实说,我真的不知道出了什么问题。

连接数据库 .db3 没有问题,但我不知道这些错误,因为我对 SQLite 和 Android.App Dev 还很陌生。

这是 Database.Inventory 的代码:

using System;
using System.Collections.Generic;
using System.Text;
using SQLite;

namespace Inventory.Database

{
    [Table("Inventory")]
    public class Inventory

    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        public string Description { get; set; }
        public string Style { get; set; }

    }
}

提前感谢您的反馈。

【问题讨论】:

    标签: c# visual-studio sqlite xamarin.forms android-sqlite


    【解决方案1】:
    var results = await db.Table<Database.Inventory>();
    
    var query = conn.Table<Database.Inventory>();
    
    query.ToListAsync().ContinueWith((t) =>
    {
        foreach (var N in t.Result)
        {
          // code from your foreach loop
        }
    });
    

    【讨论】:

    • 看起来您的帖子主要是代码,请添加更多详细信息来解释您为解决 OP 的问题所做的工作
    【解决方案2】:

    您正在调用SQLiteAsyncConnection 的一个新实例,它的所有方法(如果需要)使用async 指令。在SQLite NuGet source code中,你会发现Table&lt;T&gt;返回了一个AsyncTableQuery类型的变量。 AsyncTableQuery 不实现或继承任何东西。它是一个独立的类,这意味着它无法访问它期望为 foreach 语句访问的方法 GetEnumerator

    所以,在你的代码中:

    var db = new SQLiteAsyncConnection(Database.DatabasePath);
    foreach ( var N in db.Table<Database.Inventory>() ) // Table<T> does *not* return a List<T>!!
    {
        InventoryItems.Add(new Store_Listing 
        { 
            Id = N.Id, 
            Description = N.Description, 
            Style = N.Style 
        });
    }
    

    您正在尝试访问您认为List,但实际上AsyncTableQuery

    如何解决这个问题

    如果您查看AsyncTableQuery 类,它有一个ToListAsync 方法,该方法将AsyncTableQuery 对象转换为List&lt;T&gt; 对象。只需调用它即可将您的Table&lt;T&gt; 转换为List&lt;T&gt;,如下所示:

    var db = new SQLiteAsyncConnection(Database.DatabasePath);
    var myList = await db.Table<Database.Inventory>().ToListAsync();
    
    // TODO: Add a null or empty check to prevent NullExceptions.
    
    foreach(var N in myList)
    {
        // Do your stuff
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 2022-10-13
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      相关资源
      最近更新 更多