使用 SQLite-Net 的通用 class 方法

Generic class method using SQLite-Net

我正在尝试编写一个通用方法来从表中获取数据。

我正在使用 sqlite-net ORM。

我的方法可以很好地编译删除:

public bool DeleteItem<T>(T NewItem)
{
    SQLiteConnection conn = new SQLiteConnection(GetConnection());
    var result = conn.Delete<T>(NewItem);

    //...
}

public void CreateTable<T>()
{
    SQLiteConnection conn = new SQLiteConnection(GetConnection());
    conn.CreateTable<T>();
    conn.Close();
}

但是如果我尝试获取 Table 数据作为列表,我会在 conn.Table:

处遇到编译错误

T Must be a non-Abstract Type ....

这是我不想编译的代码:

public List<T> GetAllItems<T>(string SelTable)
{
    SQLiteConnection conn = new SQLiteConnection(GetConnection());
    List<T> MyItems = conn.Table<T>().ToList();
    conn.Close();
    return MyItems;
}

SQLiteConnection中Table的定义是

public TableQuery<T> Table<T>() where T : new();

所以你必须添加类型约束:

public bool DeleteItem<T>(T NewItem) where T : new()  // not required, but useful
{
    SQLiteConnection conn = new SQLiteConnection("xx");
    var result = conn.Delete<T>(NewItem);
    return true;
}
public void CreateTable<T>() where T : new()          // not required, but useful
{
    SQLiteConnection conn = new SQLiteConnection("xx");
    conn.CreateTable<T>();
    conn.Close();
}
public List<T> GetAllItems<T>(string SelTable) where T : new()
{
    SQLiteConnection conn = new SQLiteConnection("xx");
    List<T> MyItems = conn.Table<T>().ToList();
    conn.Close();
    return MyItems;
}