Tôi đang sử dụng SQLite-net (https://github.com/praeclarum/sqlite-net) để thực hiện một cơ sở dữ liệu sử dụng Mono trên Android và đã điều sau đây:Tạo truy vấn chung trong SQLite-net C# sử dụng SQLiteAsyncConnection
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);
}
này là rất tốt cho tôi một danh sách các cổ phiếu, nhưng tôi dự tính có một bộ sưu tập các bảng trong dự án của tôi và không muốn tạo một AddX, GetAllX, QueryReturns (X) riêng biệt, vv cho mỗi bảng. Tôi sau một cách chung chung làm các hoạt động cơ sở dữ liệu và thử như sau:
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);
}
}
Tuy nhiên, nó không biên dịch nói: 'T' phải là một loại phi trừu tượng với một constructor parameterless công để sử dụng nó làm tham số 'T' trong kiểu generic hoặc phương thức 'DatabaseUtility.AsyncTableQuery'.
Bất kỳ ý tưởng nào về cách tôi có thể truy cập loại cơ sở dữ liệu chung này hoạt động như thế nào?
Rực rỡ, hoạt động hoàn hảo. Cảm ơn. –