public SqlCommand BuildSearchQuery(SqlConnection connection, Guid rootMapUid, int pageNumber = 1, int pageSize = 5)
{
BuildOrderByData();
string searchQueryCount;
string searchQueryText;
int numberToTake = pageNumber * pageSize;
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@RootMapUid", rootMapUid));
if (MetadataFilters.Count > 0)
{
StringBuilder filterBuilder = new StringBuilder();
int count = 1;
foreach (SearchCondition condition in MetadataFilters)
{
string conditionSqlQuery;
condition.Index = count;
count++;
if (condition.ValidateCondition(out conditionSqlQuery))
{
filterBuilder.Append(conditionSqlQuery);
filterBuilder.Append("AND");
}
parameters.Add(condition.MetadataNameParameter);
parameters.Add(condition.SearchConditionParameter);
}
searchQueryCount = string.Format(SearchQueryCount, filterBuilder.ToString());
searchQueryText = string.Format(SearchQuery, numberToTake, SortColumn, OrderDirection, filterBuilder.ToString());
}
else
{
searchQueryCount = string.Format(SearchQueryCount, string.Empty);
searchQueryText = string.Format(SearchQuery, numberToTake, SortColumn, OrderDirection, string.Empty);
}
if (pageNumber > 1)
{
string forwardOrder;
string reverseOrder;
if (Ascending)
{
forwardOrder = "ASC";
reverseOrder = "DESC";
}
else
{
forwardOrder = "DESC";
reverseOrder = "ASC";
}
searchQueryText = string.Format(PaginationSearchQuery, pageSize, searchQueryText, SortColumn, reverseOrder, forwardOrder);
}
SqlCommand searchQuery = new SqlCommand(searchQueryCount + ";" + searchQueryText, connection);
searchQuery.Parameters.AddRange(parameters.ToArray());
return searchQuery;
}
}