public virtual PagedResult <Company> GetCompanies(string expression, dynamic parameters, int pageIndex = 0, int pageSize = 2147483647, IEnumerable <Sort> sort = null) { var searchBuilder = new SqlBuilder(); var search = searchBuilder.AddTemplate(SqlTemplate.CompanySearch(), 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("Company.Name"); } var countBuilder = new SqlBuilder(); var count = countBuilder.AddTemplate(SqlTemplate.CompanySearchCount()); if (!string.IsNullOrEmpty(expression)) { countBuilder.Where(expression, parameters); } using (var connection = _dapperContext.GetOpenConnection()) { var companys = connection.Query <Company, ValueItem, Company>(search.RawSql, (company, valueItem) => { company.CompanyType = valueItem; return(company); }, search.Parameters); var totalCount = connection.Query <int>(count.RawSql, search.Parameters).Single(); return(new PagedResult <Company>(companys, totalCount)); } }