public virtual PagedResult <Attribute> GetAttributes(string expression, dynamic parameters, int pageIndex = 0, int pageSize = 2147483647, IEnumerable <Sort> sort = null) { var searchBuilder = new SqlBuilder(); var search = searchBuilder.AddTemplate(SqlTemplate.AttributeSearch(), new { skip = pageIndex * pageSize, take = pageSize }); if (!string.IsNullOrEmpty(expression)) { searchBuilder.Where(expression, parameters); } if (sort != null) { foreach (var s in sort) { searchBuilder.OrderBy(s.ToExpression()); } } else { searchBuilder.OrderBy("Name"); } var countBuilder = new SqlBuilder(); var count = countBuilder.AddTemplate(SqlTemplate.AttributeSearchCount()); if (!string.IsNullOrEmpty(expression)) { countBuilder.Where(expression, parameters); } using (var connection = _dapperContext.GetOpenConnection()) { var attributes = connection.Query <Attribute>(search.RawSql, search.Parameters); var totalCount = connection.Query <int>(count.RawSql, search.Parameters).Single(); return(new PagedResult <Attribute>(attributes, totalCount)); } }