/// <summary>
        /// Add a temporary Entity Type for testing.
        /// </summary>
        /// <param name="name">Name of the Entity Type</param>
        /// <param name="entityType">The Entity Type definition.</param>
        public void AddTemp(string name, DSEntityType entityType)
        {
            if (tempItems == null)
            {
                tempItems = new Dictionary <string, DSEntityType>();
            }

            tempItems[name] = entityType;
        }
        /// <summary>
        /// Build out the supplied search.
        /// </summary>
        /// <param name="search">Search definition to build.</param>
        public void BuildSearch(DSSearch search)
        {
            _entity = _entityTypeRepository.Get(search.Type);

            if (_entity == null)
            {
                throw new SearchBuilderException(string.Format("Entity type '{0}' not found.", search.Type));
            }

            _searchBuilder.AddTable(_entity.StorageName);
            _searchBuilder.Distinct = search.Distinct;

            foreach (var item in search.Select)
            {
                ParseSelect(item);
            }

            if (search.ShouldSerializeWhere())
            {
                BuildFilter(search.Where);
            }

            if (search.ShouldSerializeOrder())
            {
                foreach (var item in search.Order)
                {
                    _searchBuilder.AddSort(GetQualifiedName(item.Name), item.Desc);
                }
            }

            // Have to add in default sort by the Key to ensure we will be paging consistently
            _searchBuilder.AddSort(GetQualifiedName(_entity.KeyName), false);

            // Apply paging
            _searchBuilder.AddPaging(search.Page, search.PageSize);

            _searchBuilder.Complete();
        }