internal List <T> ExecuteQuery() { // don't execute queries twice if (result != null) { return(result); } // execute query Tuple <string, SQLiteParameter[]> prepared = PrepareQuery(); result = new List <T>(); using (DatabaseConnection connection = db.OpenConnection()) { using (Query query = connection.CreateQuery(prepared.Item1, prepared.Item2)) { while (query.Reader.Read()) { T obj = factory.CreateObject(query.Reader); if (finalize != null) { obj = finalize(obj); } result.Add(obj); } } } return(result); }
public int Count() { // if we already know it, just return that instead of querying again if (result != null) { return(result.Count); } // execute the query Tuple <string, SQLiteParameter[]> prepared = PrepareQuery(); string sql = "SELECT COUNT(*) AS count FROM (" + prepared.Item1 + ") tbl"; using (DatabaseConnection conn = db.OpenConnection()) { using (Query query = conn.CreateQuery(sql, prepared.Item2)) { query.Reader.Read(); return(query.Reader.ReadInt32(0)); } } }