Exemple #1
0
        private IList <Resource> GetRelatedItems <TResource>(TResource resource, Guid userId)
            where TResource : Resource
        {
            // Display up to 3 of the current type and 1 of each other.
            // If there are insufficient of any type make up numbers with articles.
            // Fetch one more than the required number in case the current item is fetched

            var articles = _resourcesQuery.GetRelatedArticles(resource.SubcategoryId, userId, RelatedItemsCount + 1);
            var videos   = _resourcesQuery.GetRelatedVideos(resource.SubcategoryId, userId, RelatedItemsCount + 1);
            var qnas     = _resourcesQuery.GetRelatedQnAs(resource.SubcategoryId, userId, RelatedItemsCount + 1);

            var relatedItems = new List <Resource>();

            if (resource is QnA)
            {
                relatedItems = relatedItems.Concat(from q in qnas where q.Id != resource.Id select q).Take(3).ToList();
                relatedItems = relatedItems.Concat(videos.Take(1)).ToList();
                relatedItems = relatedItems.Concat(articles.Take(RelatedItemsCount - relatedItems.Count)).ToList();
            }
            else if (resource is Video)
            {
                relatedItems = relatedItems.Concat(from v in videos where v.Id != resource.Id select v).Take(3).ToList();
                relatedItems = relatedItems.Concat(qnas.Take(1)).ToList();
                relatedItems = relatedItems.Concat(articles.Take(RelatedItemsCount - relatedItems.Count)).ToList();
            }
            else if (resource is Article)
            {
                var relatedQnas   = qnas.Take(1).ToList();
                var relatedVideos = videos.Take(1).ToList();

                var articlesCount = RelatedItemsCount - relatedQnas.Count - relatedVideos.Count;
                relatedItems = relatedItems.Concat(from a in articles where a.Id != resource.Id select a).Take(articlesCount).Concat(relatedQnas).Concat(relatedVideos).ToList();
            }

            return(relatedItems);
        }