TransactionalNodeService.Common.SearchConditions.BuildSearchQuery C# (CSharp) Method

BuildSearchQuery() public method

public BuildSearchQuery ( SqlConnection connection, System.Guid rootMapUid, int pageNumber = 1, int pageSize = 5 ) : SqlCommand
connection System.Data.SqlClient.SqlConnection
rootMapUid System.Guid
pageNumber int
pageSize int
return System.Data.SqlClient.SqlCommand
        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)
            {
                string filter = BuildConditionFilter(parameters);
                if (SearchOperation == SearchOperation.OR)
                {
                    searchQueryCount = string.Format(SearchQueryCount, filter);
                    searchQueryText = string.Format(SearchQuery, numberToTake, SortColumn, OrderDirection, filter);
                }
                else
                {
                    parameters.Add(new SqlParameter("@FilterCount", MetadataFilters.Count));
                    searchQueryCount = string.Format(SearchANDQueryCount, filter);
                    searchQueryText = string.Format(SearchANDQuery, numberToTake, SortColumn, OrderDirection, filter);
                }
            }
            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;
        }

Usage Example

        /// <summary>
        /// TODO: This method needs to be moved from here as it makes calls to schema specific methods.
        /// </summary>
        /// <param name="callingUrl"></param>
        /// <param name="domainId"></param>
        /// <param name="conditions"></param>
        /// <param name="pageNumber"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public SearchMapResult SearchMap(IGlymaSession glymaSession, Guid domainId, Guid rootMapUid, SearchConditions conditions, int pageNumber = 1, int pageSize = 5)
        {
            SearchMapResult result = new SearchMapResult();

            using (IDbConnectionAbstraction mapDbConnection = glymaSession.ConnectionFactory.CreateMapDbConnection())
            {
                mapDbConnection.Open();

                SqlCommand findMetadata = conditions.BuildSearchQuery(mapDbConnection.Connection, rootMapUid, pageNumber, pageSize);

                SqlDataReader matchingMetadata = findMetadata.ExecuteReader();

                matchingMetadata.Read();
                int totalMetadataCount = (int)matchingMetadata[0];
                matchingMetadata.NextResult();

                int currentMetadataPagePosition = pageNumber * pageSize;

                DataTable nodesList;

                result.Count = totalMetadataCount;

                if (currentMetadataPagePosition > totalMetadataCount && pageNumber > 1)
                {
                    int itemsToRemove = currentMetadataPagePosition - totalMetadataCount;

                    if (itemsToRemove >= pageSize)
                    {
                        result = new SearchMapResult();

                        return result;
                    }
                    else
                    {
                        nodesList = new DataTable("NodesList");
                        nodesList.Load(matchingMetadata);

                        for (int i = 0; i < itemsToRemove; i++)
                        {
                            nodesList.Rows.RemoveAt(0);
                        }

                        nodesList.Columns.Remove("Modified");
                    }
                }
                else
                {
                    nodesList = new DataTable("NodesList");
                    nodesList.Load(matchingMetadata);
                    nodesList.Columns.Remove("Modified");
                }

                QueryNodes queryNodes = new QueryNodes(mapDbConnection);
                Dictionary<Guid, SearchedNode> nodes = queryNodes.GetNodes(nodesList);

                result.SearchedNodes = nodes;

                mapDbConnection.Close();

                try
                {
                    mapDbConnection.Open();
                    AuditLogItem logItem = new AuditLogItem(mapDbConnection.Connection);
                    logItem.OperationName = "SearchMap";
                    //logItem.CallingUrl = callingUrl;
                    logItem.DomainUid = domainId;
                    logItem.NodeUid = null;
                    logItem.RootMapUid = rootMapUid;
                    logItem.MaxDepth = null;
                    logItem.ObjectIndex = null;
                    logItem.EdgeConditions = null;
                    logItem.FilterConditions = null;
                    logItem.SearchConditions = null;
                    logItem.PageNumber = pageNumber;
                    logItem.PageSize = pageSize;
                    logItem.Commit();
                    mapDbConnection.Close();
                }
                catch
                {
                    /// Don't do anything. This is here because audit logging is a very low importance task and we don't want it potentially killing the more important tasks at hand.
                }

                return result;
            }
        }
All Usage Examples Of TransactionalNodeService.Common.SearchConditions::BuildSearchQuery