Example #1
0
        public string GetContentOrderByString(int siteId, string orderValue, TaxisType defaultType)
        {
            var taxisType     = defaultType;
            var orderByString = string.Empty;

            if (!string.IsNullOrEmpty(orderValue))
            {
                if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderDefault))
                {
                    taxisType = TaxisType.OrderByTaxisDesc;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderBack))
                {
                    taxisType = TaxisType.OrderByTaxis;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderAddDate))
                {
                    taxisType = TaxisType.OrderByAddDateDesc;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderAddDateBack))
                {
                    taxisType = TaxisType.OrderByAddDate;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderLastModifiedDate))
                {
                    taxisType = TaxisType.OrderByLastModifiedDateDesc;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderLastModifiedDateBack))
                {
                    taxisType = TaxisType.OrderByLastModifiedDate;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderHits))
                {
                    taxisType = TaxisType.OrderByHits;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderHitsByDay))
                {
                    taxisType = TaxisType.OrderByHitsByDay;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderHitsByWeek))
                {
                    taxisType = TaxisType.OrderByHitsByWeek;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderHitsByMonth))
                {
                    taxisType = TaxisType.OrderByHitsByMonth;
                }
                else if (StringUtils.EqualsIgnoreCase(orderValue, StlParserUtility.OrderRandom))
                {
                    taxisType = TaxisType.OrderByRandom;
                }
                else
                {
                    orderByString = orderValue;
                }
            }

            return(ETaxisTypeUtils.GetContentOrderByString(taxisType, orderByString));
        }
Example #2
0
        private static List <Channel> ParserOrder(List <Channel> channels, TaxisType taxisType)
        {
            if (taxisType == TaxisType.OrderById ||
                taxisType == TaxisType.OrderByChannelId)
            {
                return(channels.OrderBy(x => x.Id).ToList());
            }

            if (taxisType == TaxisType.OrderByIdDesc ||
                taxisType == TaxisType.OrderByChannelIdDesc)
            {
                return(channels.OrderByDescending(x => x.Id).ToList());
            }

            if (taxisType == TaxisType.OrderByAddDate)
            {
                return(channels.OrderBy(x => x.AddDate).ToList());
            }

            if (taxisType == TaxisType.OrderByAddDateDesc)
            {
                return(channels.OrderByDescending(x => x.AddDate).ToList());
            }

            if (taxisType == TaxisType.OrderByLastModifiedDate)
            {
                return(channels.OrderBy(x => x.LastModifiedDate).ToList());
            }

            if (taxisType == TaxisType.OrderByLastModifiedDateDesc)
            {
                return(channels.OrderByDescending(x => x.LastModifiedDate).ToList());
            }

            if (taxisType == TaxisType.OrderByTaxis)
            {
                return(channels.OrderBy(x => x.Taxis).ToList());
            }

            if (taxisType == TaxisType.OrderByTaxisDesc)
            {
                return(channels.OrderByDescending(x => x.Taxis).ToList());
            }

            if (taxisType == TaxisType.OrderByRandom)
            {
                return(channels.OrderBy(x => Guid.NewGuid()).ToList());
            }

            return(channels.OrderBy(x => x.Taxis).ToList());
        }
Example #3
0
        private static List <Site> ParserOrder(List <Site> sites, TaxisType taxisType)
        {
            if (taxisType == TaxisType.OrderById)
            {
                return(sites.OrderBy(x => x.Id).ToList());
            }

            if (taxisType == TaxisType.OrderByIdDesc)
            {
                return(sites.OrderByDescending(x => x.Id).ToList());
            }

            if (taxisType == TaxisType.OrderByAddDate)
            {
                return(sites.OrderBy(x => x.CreatedDate).ToList());
            }

            if (taxisType == TaxisType.OrderByAddDateDesc)
            {
                return(sites.OrderByDescending(x => x.CreatedDate).ToList());
            }

            if (taxisType == TaxisType.OrderByLastModifiedDate)
            {
                return(sites.OrderBy(x => x.LastModifiedDate).ToList());
            }

            if (taxisType == TaxisType.OrderByLastModifiedDate)
            {
                return(sites.OrderByDescending(x => x.LastModifiedDate).ToList());
            }

            if (taxisType == TaxisType.OrderByTaxis)
            {
                return(sites.OrderBy(x => x.Taxis).ToList());
            }

            if (taxisType == TaxisType.OrderByTaxisDesc)
            {
                return(sites.OrderByDescending(x => x.Taxis).ToList());
            }

            if (taxisType == TaxisType.OrderByRandom)
            {
                return(sites.OrderBy(x => Guid.NewGuid()).ToList());
            }

            return(sites.OrderBy(x => x.Taxis).ToList());
        }
Example #4
0
        public static string GetContentOrderAttributeName(TaxisType taxisType)
        {
            var retVal = nameof(Content.Taxis);

            switch (taxisType)
            {
            case TaxisType.OrderById:
            case TaxisType.OrderByIdDesc:
                retVal = nameof(Content.Id);
                break;

            case TaxisType.OrderByChannelId:
            case TaxisType.OrderByChannelIdDesc:
                retVal = nameof(Content.ChannelId);
                break;

            case TaxisType.OrderByAddDate:
            case TaxisType.OrderByAddDateDesc:
                retVal = nameof(Content.AddDate);
                break;

            case TaxisType.OrderByLastModifiedDate:
            case TaxisType.OrderByLastModifiedDateDesc:
                retVal = nameof(Content.LastModifiedDate);
                break;

            case TaxisType.OrderByHits:
                retVal = nameof(Content.Hits);
                break;

            case TaxisType.OrderByHitsByDay:
                retVal = nameof(Content.HitsByDay);
                break;

            case TaxisType.OrderByHitsByWeek:
                retVal = nameof(Content.HitsByWeek);
                break;

            case TaxisType.OrderByHitsByMonth:
                retVal = nameof(Content.HitsByMonth);
                break;
            }

            return(retVal);
        }
Example #5
0
        public static string GetContentOrderByString(TaxisType taxisType, string orderByString)
        {
            if (!string.IsNullOrEmpty(orderByString))
            {
                if (orderByString.Trim().ToUpper().StartsWith("ORDER BY "))
                {
                    return(orderByString);
                }
                return("ORDER BY " + orderByString);
            }

            var retVal = string.Empty;

            if (taxisType == TaxisType.OrderById)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.Id)} ASC";
            }
            else if (taxisType == TaxisType.OrderByIdDesc)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByChannelId)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.ChannelId)} ASC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByChannelIdDesc)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.ChannelId)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByAddDate)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.AddDate)} ASC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByAddDateDesc)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.AddDate)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByLastModifiedDate)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.LastModifiedDate)} ASC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByLastModifiedDateDesc)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.LastModifiedDate)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByTaxis)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.Taxis)} ASC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByTaxisDesc)
            {
                retVal = $"ORDER BY {nameof(Content.Top)} DESC, {nameof(Content.Taxis)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByHits)
            {
                retVal = $"ORDER BY {nameof(Content.Hits)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByHitsByDay)
            {
                retVal = $"ORDER BY {nameof(Content.HitsByDay)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByHitsByWeek)
            {
                retVal = $"ORDER BY {nameof(Content.HitsByWeek)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByHitsByMonth)
            {
                retVal = $"ORDER BY {nameof(Content.HitsByMonth)} DESC, {nameof(Content.Id)} DESC";
            }
            else if (taxisType == TaxisType.OrderByRandom)
            {
                //retVal = SqlUtils.GetOrderByRandom();
            }

            return(retVal);
        }
Example #6
0
 public static string GetContentOrderByString(TaxisType taxisType)
 {
     return(GetContentOrderByString(taxisType, string.Empty));
 }
 private void ParserOrderQuery(Query query, TaxisType taxisType)
 {
     if (taxisType == TaxisType.OrderById)
     {
         query.OrderByDesc(nameof(Content.Top)).OrderBy(nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByIdDesc)
     {
         query.OrderByDesc(nameof(Content.Top), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByChannelId)
     {
         query.OrderByDesc(nameof(Content.Top))
         .OrderBy(nameof(Content.ChannelId))
         .OrderByDesc(nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByChannelIdDesc)
     {
         query.OrderByDesc(nameof(Content.Top), nameof(Content.ChannelId), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByAddDate)
     {
         query.OrderByDesc(nameof(Content.Top))
         .OrderBy(nameof(Content.AddDate))
         .OrderByDesc(nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByAddDateDesc)
     {
         query.OrderByDesc(nameof(Content.Top), nameof(Content.AddDate), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByLastModifiedDate)
     {
         query.OrderByDesc(nameof(Content.Top))
         .OrderBy(nameof(Content.LastModifiedDate))
         .OrderByDesc(nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByLastModifiedDateDesc)
     {
         query.OrderByDesc(nameof(Content.Top), nameof(Content.LastModifiedDate), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByTaxis)
     {
         query.OrderByDesc(nameof(Content.Top))
         .OrderBy(nameof(Content.Taxis))
         .OrderByDesc(nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByTaxisDesc)
     {
         query.OrderByDesc(nameof(Content.Top), nameof(Content.Taxis), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByHits)
     {
         query.OrderByDesc(nameof(Content.Hits), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByHitsByDay)
     {
         query.OrderByDesc(nameof(Content.HitsByDay), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByHitsByWeek)
     {
         query.OrderByDesc(nameof(Content.HitsByWeek), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByHitsByMonth)
     {
         query.OrderByDesc(nameof(Content.HitsByMonth), nameof(Content.Id));
     }
     else if (taxisType == TaxisType.OrderByRandom)
     {
         query.OrderByRandom(Guid.NewGuid().ToString());
     }
 }
        public async Task <List <KeyValuePair <int, Content> > > ParserGetContentsDataSourceAsync(Site site, int channelId, int contentId, string groupContent, string groupContentNot, string tags, bool isImageExists, bool isImage, bool isVideoExists, bool isVideo, bool isFileExists, bool isFile, bool isRelatedContents, int startNum, int totalNum, TaxisType taxisType, bool isTopExists, bool isTop, bool isRecommendExists, bool isRecommend, bool isHotExists, bool isHot, bool isColorExists, bool isColor, ScopeType scopeType, string groupChannel, string groupChannelNot, NameValueCollection others, Query query)
        {
            if (!await _channelRepository.IsExistsAsync(channelId))
            {
                return(null);
            }

            var channel = await _channelRepository.GetAsync(channelId);

            var repository = GetRepository(site, channel);

            query = GetQuery(query, site.Id)
                    .Select(
                nameof(ContentSummary.Id),
                nameof(ContentSummary.ChannelId),
                nameof(ContentSummary.Checked),
                nameof(ContentSummary.CheckedLevel)
                )
                    .WhereTrue(nameof(Content.Checked));

            if (isRelatedContents && contentId > 0)
            {
                query.WhereNot(nameof(Content.Id), contentId);
            }

            if (isTopExists)
            {
                query = isTop ? query.WhereTrue(nameof(Content.Top)) : query.WhereNullOrFalse(nameof(Content.Top));
            }

            if (isRecommendExists)
            {
                query = isRecommend
                    ? query.WhereTrue(nameof(Content.Recommend))
                    : query.WhereNullOrFalse(nameof(Content.Recommend));
            }

            if (isHotExists)
            {
                query = isHot ? query.WhereTrue(nameof(Content.Hot)) : query.WhereNullOrFalse(nameof(Content.Hot));
            }

            if (isColorExists)
            {
                query = isColor ? query.WhereTrue(nameof(Content.Color)) : query.WhereNullOrFalse(nameof(Content.Color));
            }

            if (!string.IsNullOrEmpty(groupContent))
            {
                query.Where(q => q
                            .Where(nameof(Content.GroupNames), groupContent)
                            .OrWhereInStr(repository.Database.DatabaseType, nameof(Content.GroupNames), $",{groupContent}")
                            .OrWhereInStr(repository.Database.DatabaseType, nameof(Content.GroupNames), $",{groupContent},")
                            .OrWhereInStr(repository.Database.DatabaseType, nameof(Content.GroupNames), $"{groupContent},")
                            );
            }

            if (!string.IsNullOrEmpty(groupContentNot))
            {
                query
                .WhereNot(nameof(Content.GroupNames), groupContentNot)
                .WhereNotInStr(repository.Database.DatabaseType, nameof(Content.GroupNames), $",{groupContentNot}")
                .WhereNotInStr(repository.Database.DatabaseType, nameof(Content.GroupNames), $",{groupContentNot},")
                .WhereNotInStr(repository.Database.DatabaseType, nameof(Content.GroupNames), $"{groupContentNot},");
            }

            if (!string.IsNullOrEmpty(tags))
            {
                var tagNames = ListUtils.GetStringList(tags);
                foreach (var tagName in tagNames)
                {
                    query.Where(q => q
                                .Where(nameof(Content.TagNames), tagName)
                                .OrWhereInStr(repository.Database.DatabaseType, nameof(Content.TagNames), $",{tagName}")
                                .OrWhereInStr(repository.Database.DatabaseType, nameof(Content.TagNames), $",{tagName},")
                                .OrWhereInStr(repository.Database.DatabaseType, nameof(Content.TagNames), $"{tagName},"));
                }
            }

            if (isImageExists)
            {
                if (isImage)
                {
                    query
                    .WhereNot(nameof(Content.ImageUrl), string.Empty)
                    .WhereNotNull(nameof(Content.ImageUrl));
                }
                else
                {
                    query.WhereNullOrEmpty(nameof(Content.ImageUrl));
                }
            }

            if (isVideoExists)
            {
                if (isVideo)
                {
                    query
                    .WhereNot(nameof(Content.VideoUrl), string.Empty)
                    .WhereNotNull(nameof(Content.VideoUrl));
                }
                else
                {
                    query.WhereNullOrEmpty(nameof(Content.VideoUrl));
                }
            }

            if (isFileExists)
            {
                if (isFile)
                {
                    query
                    .WhereNot(nameof(Content.FileUrl), string.Empty)
                    .WhereNotNull(nameof(Content.FileUrl));
                }
                else
                {
                    query.WhereNullOrEmpty(nameof(Content.FileUrl));
                }
            }

            var channelIdList = await _channelRepository.GetChannelIdsAsync(channel, scopeType, groupChannel, groupChannelNot, string.Empty);

            if (channelIdList == null || channelIdList.Count == 0)
            {
                return(null);
            }

            if (channelIdList.Count == 1)
            {
                query.Where(nameof(Content.ChannelId), channelIdList[0]);
            }
            else
            {
                query.WhereIn(nameof(Content.ChannelId), channelIdList);
            }

            if (others != null && others.Count > 0)
            {
                foreach (var attributeName in others.AllKeys)
                {
                    if (repository.TableColumns.Exists(x =>
                                                       StringUtils.EqualsIgnoreCase(x.AttributeName, attributeName)))
                    {
                        var value = others.Get(attributeName);
                        if (!string.IsNullOrEmpty(value))
                        {
                            if (StringUtils.StartsWithIgnoreCase(value, "not:"))
                            {
                                value = value.Substring("not:".Length);
                                if (value.IndexOf(',') == -1)
                                {
                                    query.WhereNot(attributeName, value);
                                }
                                else
                                {
                                    var collection = ListUtils.GetStringList(value);
                                    foreach (var val in collection)
                                    {
                                        query.WhereNot(attributeName, val);
                                    }
                                }
                            }
                            else if (StringUtils.StartsWithIgnoreCase(value, "contains:"))
                            {
                                value = value.Substring("contains:".Length);
                                if (value.IndexOf(',') == -1)
                                {
                                    query.WhereLike(attributeName, $"%{value}%");
                                }
                                else
                                {
                                    var collection = ListUtils.GetStringList(value);
                                    query.Where(q =>
                                    {
                                        foreach (var val in collection)
                                        {
                                            q.OrWhereLike(attributeName, $"%{val}%");
                                        }
                                        return(q);
                                    });
                                }
                            }
                            else if (StringUtils.StartsWithIgnoreCase(value, "start:"))
                            {
                                value = value.Substring("start:".Length);
                                if (value.IndexOf(',') == -1)
                                {
                                    query.WhereStarts(attributeName, value);
                                }
                                else
                                {
                                    var collection = ListUtils.GetStringList(value);
                                    query.Where(q =>
                                    {
                                        foreach (var val in collection)
                                        {
                                            q.OrWhereStarts(attributeName, val);
                                        }
                                        return(q);
                                    });
                                }
                            }
                            else if (StringUtils.StartsWithIgnoreCase(value, "end:"))
                            {
                                value = value.Substring("end:".Length);
                                if (value.IndexOf(',') == -1)
                                {
                                    query.WhereEnds(attributeName, value);
                                }
                                else
                                {
                                    var collection = ListUtils.GetStringList(value);
                                    query.Where(q =>
                                    {
                                        foreach (var val in collection)
                                        {
                                            q.OrWhereEnds(attributeName, val);
                                        }
                                        return(q);
                                    });
                                }
                            }
                            else
                            {
                                if (value.IndexOf(',') == -1)
                                {
                                    query.Where(attributeName, value);
                                }
                                else
                                {
                                    var collection = ListUtils.GetStringList(value);
                                    query.Where(q =>
                                    {
                                        foreach (var val in collection)
                                        {
                                            q.OrWhere(attributeName, val);
                                        }
                                        return(q);
                                    });
                                }
                            }
                        }
                    }
                }
            }

            ParserOrderQuery(query, taxisType);

            //if (!string.IsNullOrEmpty(where))
            //{
            //    query.WhereRaw(where);
            //}

            var summaries = await repository.GetAllAsync <ContentSummary>(query);

            if (startNum > 1 && totalNum > 0)
            {
                summaries = summaries.Skip(startNum - 1).Take(totalNum).ToList();
            }
            else if (startNum > 1)
            {
                summaries = summaries.Skip(startNum - 1).ToList();
            }
            else if (totalNum > 0)
            {
                summaries = summaries.Take(totalNum).ToList();
            }

            var list = new List <KeyValuePair <int, Content> >();
            var i    = 0;

            foreach (var summary in summaries)
            {
                var content = await GetAsync(site, summary.ChannelId, summary.Id);

                list.Add(new KeyValuePair <int, Content>(i++, content));
            }

            return(list);
        }
Example #9
0
        public async Task <List <KeyValuePair <int, Channel> > > ParserGetChannelsAsync(int siteId, int pageChannelId, string group, string groupNot, bool isImageExists, bool isImage, int startNum, int totalNum, TaxisType order, ScopeType scopeType, bool isTotal)
        {
            var channels = new List <Channel>();

            List <int> channelIdList;

            if (isTotal)//从所有栏目中选择
            {
                channelIdList = await GetChannelIdsAsync(siteId, siteId, ScopeType.All);
            }
            else
            {
                channelIdList = await GetChannelIdsAsync(siteId, pageChannelId, scopeType);
            }

            foreach (var channelId in channelIdList)
            {
                var channel = await GetAsync(channelId);

                if (!string.IsNullOrEmpty(group))
                {
                    if (!ListUtils.ContainsIgnoreCase(channel.GroupNames, group))
                    {
                        continue;
                    }
                }
                if (!string.IsNullOrEmpty(groupNot))
                {
                    if (ListUtils.ContainsIgnoreCase(channel.GroupNames, groupNot))
                    {
                        continue;
                    }
                }
                if (isImageExists)
                {
                    if (isImage)
                    {
                        if (string.IsNullOrEmpty(channel.ImageUrl))
                        {
                            continue;
                        }
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(channel.ImageUrl))
                        {
                            continue;
                        }
                    }
                }

                channels.Add(channel);
            }

            channels = ParserOrder(channels, order);
            if (startNum > 1 && totalNum > 0)
            {
                channels = channels.Skip(startNum - 1).Take(totalNum).ToList();
            }
            else if (startNum > 1)
            {
                channels = channels.Skip(startNum - 1).ToList();
            }
            else if (totalNum > 0)
            {
                channels = channels.Take(totalNum).ToList();
            }

            var list = new List <KeyValuePair <int, Channel> >();
            var i    = 0;

            foreach (var channel in channels)
            {
                list.Add(new KeyValuePair <int, Channel>(i++, channel));
            }

            return(list);
        }
Example #10
0
        public async Task <List <KeyValuePair <int, Site> > > ParserGetSitesAsync(string siteName, string siteDir, int startNum, int totalNum, ScopeType scopeType, TaxisType taxisType)
        {
            var sites     = new List <Site>();
            var summaries = await GetSummariesAsync();

            Site site = null;

            if (!string.IsNullOrEmpty(siteName))
            {
                site = await GetSiteBySiteNameAsync(siteName);
            }
            else if (!string.IsNullOrEmpty(siteDir))
            {
                site = await GetSiteByDirectoryAsync(siteDir);
            }

            var siteIds = summaries.Select(x => x.Id).ToList();

            if (site != null)
            {
                siteIds = summaries.Where(x => x.ParentId == site.Id).Select(x => x.Id).ToList();
            }
            else
            {
                if (scopeType == ScopeType.Children)
                {
                    siteIds = summaries.Where(x => x.ParentId == 0 && !x.Root).Select(x => x.Id).ToList();
                }
                else if (scopeType == ScopeType.Descendant)
                {
                    siteIds = summaries.Where(x => !x.Root).Select(x => x.Id).ToList();
                }
            }

            foreach (var siteId in siteIds)
            {
                sites.Add(await GetAsync(siteId));
            }

            sites = ParserOrder(sites, taxisType);
            if (startNum > 1 && totalNum > 0)
            {
                sites = sites.Skip(startNum - 1).Take(totalNum).ToList();
            }
            else if (startNum > 1)
            {
                sites = sites.Skip(startNum - 1).ToList();
            }
            else if (totalNum > 0)
            {
                sites = sites.Take(totalNum).ToList();
            }

            var list = new List <KeyValuePair <int, Site> >();
            var i    = 0;

            foreach (var entity in sites)
            {
                list.Add(new KeyValuePair <int, Site>(i++, entity));
            }

            return(list);
        }