/// <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); } } }