Ich verwende SQLite-net (https://github.com/praeclarum/sqlite-net) für eine Datenbank mit Mono auf Android Implementierung und haben die folgenden:generische Abfragen in SQLite-net C# Erstellen SQLiteAsyncConnection mit
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);
}
Diese für die mir groß ist ein Liste von Aktien, aber ich stelle mir vor, eine Sammlung von Tabellen in meinem Projekt zu haben und nicht für jede Tabelle ein separates AddX, GetAllX, QueryReturns (X) usw. zu erstellen. Ich bin nach einer generischen Art und Weise, diese Datenbankoperationen zu tun und versucht, die folgenden:
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);
}
}
Aber es lässt sich nicht kompilieren zu sagen: ‚T‘ eine nicht-abstrakten Typ mit einem öffentlichen parameterlosen Konstruktor sein muss, um um es als Parameter 'T' im generischen Typ oder in der Methode 'DatabaseUtility.AsyncTableQuery' zu verwenden.
Irgendwelche Ideen, wie ich diese Art von generischem Datenbankzugriff zum Laufen bringen kann?
Brilliant, funktioniert perfekt. Vielen Dank. –