使用 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;
}
我正在尝试编写一个通用方法来从表中获取数据。
我正在使用 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;
}