/// <summary> /// Synchronously execute the given query expected to return 0 or 1 items. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <returns></returns> public T ExecuteSingleQuery <T>(IComplexDataQuery <T> query) { using (var cn = new SqlConnection(this.connectionString)) { var cmd = query.ConstructCommand(cn); cn.Open(); using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection | query.GetCustomCommandBehaviors(cn, cmd))) { T row = query.Retrieve(cmd, dr); return(row); } } }
/// <summary> /// Asynchronously execute the given query expected to return 0 or more rows. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <param name="expectedCapacity"></param> /// <param name="factory"></param> /// <returns></returns> public async Task <T> ExecuteListQueryAsync <T>(IComplexDataQuery <T> query, int expectedCapacity = 10, TaskFactory <T> factory = null) { if (expectedCapacity < 0) { expectedCapacity = 0; } if (factory == null) { factory = new TaskFactory <T>(); } using (var cn = new SqlConnection(this.connectionString)) { var cmd = query.ConstructCommand(cn); cn.Open(); using (SqlDataReader dr = await cmd.ExecuteReaderAsync(CommandBehavior.CloseConnection | query.GetCustomCommandBehaviors(cn, cmd))) { return(await query.RetrieveAsync(cmd, dr, expectedCapacity)); } } }
/// <summary> /// Asynchronously execute the given query expected to return 0 or 1 items. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="query"></param> /// <param name="factory"></param> /// <returns></returns> public async Task <T> ExecuteSingleQueryAsync <T>(IComplexDataQuery <T> query, TaskFactory <T> factory = null) { if (factory == null) { factory = new TaskFactory <T>(); } using (var cn = new SqlConnection(this.connectionString)) { var cmd = query.ConstructCommand(cn); cn.Open(); using (SqlDataReader dr = await cmd.ExecuteReaderAsync(CommandBehavior.CloseConnection | query.GetCustomCommandBehaviors(cn, cmd))) { T row = await query.RetrieveAsync(cmd, dr); return(row); } } }