diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs index c07691172d..bd395ed077 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentRepository.cs @@ -88,21 +88,17 @@ namespace Umbraco.Core.Persistence.Repositories protected override IEnumerable PerformGetAll(params int[] ids) { + var sqlClause = GetBaseQuery(false); if (ids.Any()) { - foreach (var id in ids) - { - yield return Get(id); - } + sqlClause.Where("umbracoNode.id in (@ids)", new {ids = ids}); } else { - var nodeDtos = Database.Fetch("WHERE nodeObjectType = @NodeObjectType", new { NodeObjectType = NodeObjectTypeId }); - foreach (var nodeDto in nodeDtos) - { - yield return Get(nodeDto.NodeId); - } + sqlClause.Where(x => x.NodeObjectType == NodeObjectTypeId); } + + return ProcessQuery(sqlClause); } protected override IEnumerable PerformGetByQuery(IQuery query) @@ -114,36 +110,7 @@ namespace Umbraco.Core.Persistence.Repositories .OrderByDescending(x => x.VersionDate) .OrderBy(x => x.SortOrder); - //NOTE: This doesn't allow properties to be part of the query - var dtos = Database.Fetch(sql); - - //content types - var contentTypes = _contentTypeRepository.GetAll(dtos.Select(x => x.ContentVersionDto.ContentDto.ContentTypeId).ToArray()) - .ToArray(); - - var templates = _templateRepository.GetAll( - dtos - .Where(dto => dto.TemplateId.HasValue && dto.TemplateId.Value > 0) - .Select(x => x.TemplateId.Value).ToArray()) - .ToArray(); - - //Go get the property data for each document - var docDefs = dtos.Select(dto => new Tuple( - dto.NodeId, - dto.VersionId, - contentTypes.First(ct => ct.Id == dto.ContentVersionDto.ContentDto.ContentTypeId), - dto.ContentVersionDto.ContentDto.NodeDto.CreateDate, - dto.ContentVersionDto.VersionDate)) - .ToArray(); - - var propertyData = GetPropertyCollection(docDefs); - - return dtos.Select(dto => CreateContentFromDto( - dto, - dto.ContentVersionDto.VersionId, - contentTypes.First(ct => ct.Id == dto.ContentVersionDto.ContentDto.ContentTypeId), - templates.FirstOrDefault(tem => tem.Id == (dto.TemplateId.HasValue ? dto.TemplateId.Value : -1)), - propertyData[dto.NodeId])); + return ProcessQuery(sql); } #endregion @@ -778,6 +745,40 @@ namespace Umbraco.Core.Persistence.Repositories #endregion + private IEnumerable ProcessQuery(Sql sql) + { + //NOTE: This doesn't allow properties to be part of the query + var dtos = Database.Fetch(sql); + + //content types + var contentTypes = _contentTypeRepository.GetAll(dtos.Select(x => x.ContentVersionDto.ContentDto.ContentTypeId).ToArray()) + .ToArray(); + + var templates = _templateRepository.GetAll( + dtos + .Where(dto => dto.TemplateId.HasValue && dto.TemplateId.Value > 0) + .Select(x => x.TemplateId.Value).ToArray()) + .ToArray(); + + //Go get the property data for each document + var docDefs = dtos.Select(dto => new Tuple( + dto.NodeId, + dto.VersionId, + contentTypes.First(ct => ct.Id == dto.ContentVersionDto.ContentDto.ContentTypeId), + dto.ContentVersionDto.ContentDto.NodeDto.CreateDate, + dto.ContentVersionDto.VersionDate)) + .ToArray(); + + var propertyData = GetPropertyCollection(docDefs); + + return dtos.Select(dto => CreateContentFromDto( + dto, + dto.ContentVersionDto.VersionId, + contentTypes.First(ct => ct.Id == dto.ContentVersionDto.ContentDto.ContentTypeId), + templates.FirstOrDefault(tem => tem.Id == (dto.TemplateId.HasValue ? dto.TemplateId.Value : -1)), + propertyData[dto.NodeId])); + } + /// /// Private method to create a content object from a DocumentDto, which is used by Get and GetByVersion. ///