gpt4 book ai didi

c# - 使用 SQLiteAsyncConnection 在 SQLite-net C# 中创建通用查询

转载 作者:太空狗 更新时间:2023-10-29 23:00:15 26 4
gpt4 key购买 nike

我正在使用 SQLite-net ( https://github.com/praeclarum/sqlite-net ) 在 Android 上使用 Mono 实现数据库,并具有以下内容:

public class DatabaseTestASync
{
private SQLiteAsyncConnection m_db;

public delegate void StocksFound(List<Stock> list);
public event StocksFound StocksFoundListener;

// Uninteresting parts remove, e.g. constructor

public void AddStock(Stock stock)
{
m_db.InsertAsync(stock).ContinueWith(t => { Debug.WriteLine(stock.Symbol + " added"); });
}

public void GetAllStocks()
{
AsyncTableQuery<Stock> query = m_db.Table<Stock>().Where(stock => true);
query.ToListAsync().ContinueWith(QueryReturns);
}

private void QueryReturns(Task<List<Stock>> t)
{
if (StocksFoundListener != null)
StocksFoundListener(t.Result);
}

这非常适合给我一个股票列表,但我设想在我的项目中有一个表集合并且不想为每个表创建一个单独的 AddX、GetAllX、QueryReturns(X) 等。我正在寻找执行这些数据库操作的通用方法并尝试了以下操作:

public class DBQuery<T>
{
private SQLiteAsyncConnection m_db;
public delegate void OnRecordsFound(List<T> list);
public event OnRecordsFound RecordsFoundListener;

public DBQuery (SQLiteAsyncConnection db)
{
m_db = db;
}

public void GetAllRecords()
{
AsyncTableQuery<T> query = m_db.Table<T>().Where(r => true); // COMPILE ERROR HERE
query.ToListAsync().ContinueWith(QueryReturns);
}

private void QueryReturns(Task<List<T>> t)
{
if (RecordsFoundListener != null)
RecordsFoundListener(t.Result);
}
}

但是,它不会编译说:“T”必须是具有公共(public)无参数构造函数的非抽象类型,以便将其用作泛型类型或方法“DatabaseUtility.AsyncTableQuery”中的参数“T”。

关于如何使这种通用数据库访问正常工作,我有什么想法吗?

最佳答案

我不太了解 SQLite 的内部结构,但这完全是关于 generics...

因为 AsyncTableQuery 是这样定义的

public class AsyncTableQuery<T>
where T : new ()
{

...或者只是根据您的错误,您需要对您的 T 施加相同的约束:

public class DBQuery<T> where T : new ()

If you're using a class or a method which has a constrained generic
parameter
- you need to do the same on your method (or a class, depending on where the T is defined).

关于c# - 使用 SQLiteAsyncConnection 在 SQLite-net C# 中创建通用查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16196292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com