internal static string WhereSql(Query query)
        {
            SQLBuilder builder = new SQLBuilder();

            builder.AppendWhere();
            builder.Append(query.DirectoryId > 0, "and", "directory_id=@DirectoryId");
            builder.Append(!string.IsNullOrWhiteSpace(query.Name), "and", "api_name like '%" + query.Name + "%'");

            return builder.Sql();
        }
        internal static Tuple<string,dynamic> SelectByQuery(Query query)
        {
            string whereSql = WhereSql(query);
            string countSql = string.Join(" ", "select count(*) Count from register_apis", whereSql + ";");
            string dataSql = string.Join(" ", BaseSelectSql(), whereSql, string.Format("limit {0} offset {1};", query.PageSize, (query.PageIndex - 1) * query.PageSize));

            return new Tuple<string, dynamic>(countSql + dataSql, new
            {
                DirectoryId = query.DirectoryId
            });
        }
        public IEnumerable<Model.Api.Api> SelectByQuery(Query query, out int totalRows)
        {
            using (var conn = Database.Open())
            {
                var tuple = ApiSql.SelectByQuery(query);
                var reader = conn.QueryMultiple(tuple.Item1, (object)tuple.Item2);
                var count = reader.Read<object>().First() as IDictionary<string, object>;
                totalRows = Convert.ToInt32(count["Count"]);

                return reader.Read<Model.Api.Api>();
            }
        }