From a55ae8ba57a7dcb9f6dc6d6b790d6cf9fbc7c5c1 Mon Sep 17 00:00:00 2001 From: Stephan Date: Thu, 1 Dec 2016 08:29:11 +0100 Subject: [PATCH] Refactor Query in repos --- src/Umbraco.Core/DatabaseContext.cs | 8 +-- .../Repositories/ContentTypeRepository.cs | 2 +- .../Repositories/ContentTypeRepositoryBase.cs | 2 +- .../DataTypeDefinitionRepository.cs | 4 +- .../Repositories/DictionaryRepository.cs | 4 +- .../Interfaces/IQueryRepository.cs | 9 ++- .../Repositories/MemberGroupRepository.cs | 4 +- .../Repositories/MemberRepository.cs | 6 +- .../Repositories/NPocoRepositoryBase.cs | 12 +--- .../Repositories/RecycleBinRepository.cs | 2 +- .../Repositories/RepositoryBase.cs | 11 ++-- .../Repositories/UserRepository.cs | 3 +- .../Repositories/VersionableRepositoryBase.cs | 2 +- src/Umbraco.Core/Services/AuditService.cs | 10 ++-- src/Umbraco.Core/Services/ContentService.cs | 46 +++++++------- .../Services/ContentTypeServiceBase.cs | 12 ++-- src/Umbraco.Core/Services/DataTypeService.cs | 6 +- .../Services/ExternalLoginService.cs | 4 +- src/Umbraco.Core/Services/FileService.cs | 2 +- .../Services/LocalizationService.cs | 4 +- src/Umbraco.Core/Services/MacroService.cs | 2 +- src/Umbraco.Core/Services/MediaService.cs | 30 +++++----- src/Umbraco.Core/Services/MemberService.cs | 60 +++++++++---------- .../Services/MigrationEntryService.cs | 2 +- src/Umbraco.Core/Services/PackagingService.cs | 2 +- src/Umbraco.Core/Services/RelationService.cs | 32 +++++----- .../Services/RepositoryService.cs | 5 +- src/Umbraco.Core/Services/TaskService.cs | 2 +- src/Umbraco.Core/Services/UserService.cs | 18 +++--- .../Repositories/ContentRepositoryTest.cs | 20 +++---- .../Repositories/ContentTypeRepositoryTest.cs | 2 +- .../PublishedCache/NuCache/FacadeService.cs | 6 +- .../XmlPublishedCache/XmlStore.cs | 8 +-- 33 files changed, 165 insertions(+), 177 deletions(-) diff --git a/src/Umbraco.Core/DatabaseContext.cs b/src/Umbraco.Core/DatabaseContext.cs index 4a702b225c..e587e857f4 100644 --- a/src/Umbraco.Core/DatabaseContext.cs +++ b/src/Umbraco.Core/DatabaseContext.cs @@ -22,10 +22,6 @@ namespace Umbraco.Core private readonly IDatabaseFactory _databaseFactory; private bool _canConnectOnce; - // fixme - // do we need to expose the query factory here? - // all in all, would prob. mean replacing ALL repository.Query by something more meaningful? YES! - /// /// Initializes a new instance of the class. /// @@ -41,10 +37,12 @@ namespace Umbraco.Core _databaseFactory = databaseFactory; } + // in most cases, this should not be used, keeping it here for compatibility (temp) + // todo: get rid of it /// /// Gets the query factory. /// - /// In most cases... this is useless, better use Query{T}. + /// In most cases this should not be used, better use Query{T}. public IQueryFactory QueryFactory => _databaseFactory.QueryFactory; /// diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs index 678b2bfa2c..f561b85f31 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepository.cs @@ -190,7 +190,7 @@ namespace Umbraco.Core.Persistence.Repositories /// protected override void PersistDeletedItem(IContentType entity) { - var query = Query.Where(x => x.ParentId == entity.Id); + var query = QueryT.Where(x => x.ParentId == entity.Id); var children = GetByQuery(query); foreach (var child in children) { diff --git a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepositoryBase.cs index 22670fa6ff..e64a05165f 100644 --- a/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/ContentTypeRepositoryBase.cs @@ -67,7 +67,7 @@ namespace Umbraco.Core.Persistence.Repositories AddOrUpdate(moving); //update all descendants, update in order of level - var descendants = GetByQuery(Query.Where(type => type.Path.StartsWith(movingPath))); + var descendants = GetByQuery(QueryT.Where(type => type.Path.StartsWith(movingPath))); var paths = new Dictionary(); paths[moving.Id] = moving.Path; diff --git a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs index 140c97ba15..a345717141 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DataTypeDefinitionRepository.cs @@ -83,7 +83,7 @@ namespace Umbraco.Core.Persistence.Repositories public override void Delete(IDataTypeDefinition entity) { //Find ContentTypes using this IDataTypeDefinition on a PropertyType - var query = QueryFactory.Create().Where(x => x.DataTypeDefinitionId == entity.Id); + var query = Query().Where(x => x.DataTypeDefinitionId == entity.Id); //TODO: Don't we need to be concerned about media and member types here too ? var contentTypes = _contentTypeRepository.GetByQuery(query); @@ -376,7 +376,7 @@ AND umbracoNode.id <> @id", //update all descendants from the original path, update in order of level var descendants = this.GetByQuery( - Query.Where(type => type.Path.StartsWith(origPath + ","))); + QueryT.Where(type => type.Path.StartsWith(origPath + ","))); var lastParent = toMove; foreach (var descendant in descendants.OrderBy(x => x.Level)) diff --git a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs index d82a17fc46..a8b8bce9b4 100644 --- a/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/DictionaryRepository.cs @@ -252,7 +252,7 @@ namespace Umbraco.Core.Persistence.Repositories private IEnumerable GetRootDictionaryItems() { - var query = Query.Where(x => x.ParentId == null); + var query = QueryT.Where(x => x.ParentId == null); return GetByQuery(query); } @@ -271,7 +271,7 @@ namespace Umbraco.Core.Persistence.Repositories .Where(x => x.Parent != null) .Where($"{SqlSyntax.GetQuotedColumnName("parent")} IN (@parentIds)", new { parentIds = @group }); - var translator = new SqlTranslator(sqlClause, Query); + var translator = new SqlTranslator(sqlClause, QueryT); var sql = translator.Translate(); sql.OrderBy(x => x.UniqueId); diff --git a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IQueryRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IQueryRepository.cs index d502d11796..246b6dd489 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Interfaces/IQueryRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Interfaces/IQueryRepository.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Umbraco.Core.Models.EntityBase; using Umbraco.Core.Persistence.Querying; namespace Umbraco.Core.Persistence.Repositories @@ -9,14 +8,14 @@ namespace Umbraco.Core.Persistence.Repositories public interface IQueryRepository : IRepository { /// - /// Returns a query instance + /// Creates a new query. /// - IQuery Query { get; } + IQuery QueryT { get; } /// - /// Returns a query factory instance + /// Creates a new query. /// - IQueryFactory QueryFactory { get; } + IQuery Query(); /// /// Gets all entities of the specified type and query diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs index 75d21c8f13..081c786531 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberGroupRepository.cs @@ -124,7 +124,7 @@ namespace Umbraco.Core.Persistence.Repositories typeof (IMemberGroup).FullName + "." + name, () => { - var qry = Query.Where(group => group.Name.Equals(name)); + var qry = QueryT.Where(group => group.Name.Equals(name)); var result = GetByQuery(qry); return result.FirstOrDefault(); }, @@ -136,7 +136,7 @@ namespace Umbraco.Core.Persistence.Repositories public IMemberGroup CreateIfNotExists(string roleName) { - var qry = Query.Where(group => group.Name.Equals(roleName)); + var qry = QueryT.Where(group => group.Name.Equals(roleName)); var result = GetByQuery(qry); if (result.Any()) return null; diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs index 97b71cb350..50d0784d45 100644 --- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs @@ -440,12 +440,12 @@ namespace Umbraco.Core.Persistence.Repositories public IEnumerable FindMembersInRole(string roleName, string usernameToMatch, StringPropertyMatchType matchType = StringPropertyMatchType.StartsWith) { //get the group id - var grpQry = QueryFactory.Create().Where(group => group.Name.Equals(roleName)); + var grpQry = Query().Where(group => group.Name.Equals(roleName)); var memberGroup = _memberGroupRepository.GetByQuery(grpQry).FirstOrDefault(); if (memberGroup == null) return Enumerable.Empty(); // get the members by username - var query = Query; + var query = QueryT; switch (matchType) { case StringPropertyMatchType.Exact: @@ -495,7 +495,7 @@ namespace Umbraco.Core.Persistence.Repositories /// public IEnumerable GetByMemberGroup(string groupName) { - var grpQry = QueryFactory.Create().Where(group => group.Name.Equals(groupName)); + var grpQry = Query().Where(group => group.Name.Equals(groupName)); var memberGroup = _memberGroupRepository.GetByQuery(grpQry).FirstOrDefault(); if (memberGroup == null) return Enumerable.Empty(); diff --git a/src/Umbraco.Core/Persistence/Repositories/NPocoRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/NPocoRepositoryBase.cs index b5f8978e3c..2c28ab294f 100644 --- a/src/Umbraco.Core/Persistence/Repositories/NPocoRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/NPocoRepositoryBase.cs @@ -26,9 +26,7 @@ namespace Umbraco.Core.Persistence.Repositories /// A logger. protected NPocoRepositoryBase(IDatabaseUnitOfWork work, CacheHelper cache, ILogger logger) : base(work, cache, logger) - { - QueryFactory = work.DatabaseContext.QueryFactory; - } + { } /// /// Gets the repository's unit of work. @@ -45,16 +43,10 @@ namespace Umbraco.Core.Persistence.Repositories /// public ISqlSyntaxProvider SqlSyntax => UnitOfWork.DatabaseContext.SqlSyntax; - /// - /// Gets the repository's query factory. - /// - public override IQueryFactory QueryFactory { get; } - /// /// Creates a new query. /// - /// A new query. - public override IQuery Query => QueryFactory.Create(); + public override IQuery Query() => UnitOfWork.DatabaseContext.Query(); /// /// Creates a new Sql statement. diff --git a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs index 66ec5da4b6..06b136ed31 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RecycleBinRepository.cs @@ -22,7 +22,7 @@ namespace Umbraco.Core.Persistence.Repositories public virtual IEnumerable GetEntitiesInRecycleBin() { - return GetByQuery(Query.Where(entity => entity.Trashed)); + return GetByQuery(QueryT.Where(entity => entity.Trashed)); } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs index b1a998adfb..30d7d4a59a 100644 --- a/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/RepositoryBase.cs @@ -62,15 +62,14 @@ namespace Umbraco.Core.Persistence.Repositories protected override IRuntimeCacheProvider RuntimeCache => Cache.IsolatedRuntimeCache.GetOrCreateCache(); /// - /// Used to create a new query instance + /// Creates a new query. /// - /// - public abstract IQuery Query { get; } + public virtual IQuery QueryT => Query(); /// - /// Returns a query factory instance + /// Creates a new query. /// - public abstract IQueryFactory QueryFactory { get; } + public abstract IQuery Query(); #region Static Queries @@ -93,7 +92,7 @@ namespace Umbraco.Core.Persistence.Repositories { // have to initialize query here, because some TEntity cannot create a query, // but for those TEntity we don't perform counts? all this is a bit weird - if (_hasIdQuery == null) _hasIdQuery = Query.Where(x => x.Id != 0); + if (_hasIdQuery == null) _hasIdQuery = QueryT.Where(x => x.Id != 0); return PerformCount(_hasIdQuery); }); return _cachePolicy = new DefaultRepositoryCachePolicy(RuntimeCache, options); diff --git a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs index 670d1dd6ba..51907016eb 100644 --- a/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/UserRepository.cs @@ -332,8 +332,9 @@ namespace Umbraco.Core.Persistence.Repositories if (orderBy == null) throw new ArgumentNullException(nameof(orderBy)); // get the referenced column name and find the corresp mapped column name + var queryFactory = UnitOfWork.DatabaseContext.QueryFactory; var expressionMember = ExpressionHelper.GetMemberInfo(orderBy); - var mapper = QueryFactory.Mappers[typeof(IUser)]; + var mapper = queryFactory.Mappers[typeof(IUser)]; var mappedField = mapper.Map(SqlSyntax, expressionMember.Name); if (mappedField.IsNullOrWhiteSpace()) diff --git a/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs index c782145434..c1def95616 100644 --- a/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/VersionableRepositoryBase.cs @@ -430,7 +430,7 @@ namespace Umbraco.Core.Persistence.Repositories // start with base query, and apply the supplied IQuery var sqlBase = GetBaseQuery(false); - if (query == null) query = Query; + if (query == null) query = QueryT; var translator = new SqlTranslator(sqlBase, query); var sqlNodeIds = translator.Translate(); diff --git a/src/Umbraco.Core/Services/AuditService.cs b/src/Umbraco.Core/Services/AuditService.cs index 614d44ac98..6cc858f6e8 100644 --- a/src/Umbraco.Core/Services/AuditService.cs +++ b/src/Umbraco.Core/Services/AuditService.cs @@ -32,7 +32,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repo = uow.CreateRepository(); - var result = repo.GetByQuery(repo.Query.Where(x => x.Id == objectId)); + var result = repo.GetByQuery(repo.QueryT.Where(x => x.Id == objectId)); uow.Complete(); return result; } @@ -44,8 +44,8 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); var result = sinceDate.HasValue == false - ? repo.GetByQuery(repo.Query.Where(x => x.UserId == userId && x.AuditType == type)) - : repo.GetByQuery(repo.Query.Where(x => x.UserId == userId && x.AuditType == type && x.CreateDate >= sinceDate.Value)); + ? repo.GetByQuery(repo.QueryT.Where(x => x.UserId == userId && x.AuditType == type)) + : repo.GetByQuery(repo.QueryT.Where(x => x.UserId == userId && x.AuditType == type && x.CreateDate >= sinceDate.Value)); uow.Complete(); return result; } @@ -57,8 +57,8 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); var result = sinceDate.HasValue == false - ? repo.GetByQuery(repo.Query.Where(x => x.AuditType == type)) - : repo.GetByQuery(repo.Query.Where(x => x.AuditType == type && x.CreateDate >= sinceDate.Value)); + ? repo.GetByQuery(repo.QueryT.Where(x => x.AuditType == type)) + : repo.GetByQuery(repo.QueryT.Where(x => x.AuditType == type && x.CreateDate >= sinceDate.Value)); uow.Complete(); return result; } diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index 54e448ffeb..6cb09a5308 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -400,7 +400,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Key == key); + var query = repository.QueryT.Where(x => x.Key == key); var content = repository.GetByQuery(query).SingleOrDefault(); uow.Complete(); return content; @@ -418,7 +418,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ContentTypeId == id); + var query = repository.QueryT.Where(x => x.ContentTypeId == id); var items = repository.GetByQuery(query); uow.Complete(); return items; @@ -431,7 +431,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ContentTypeId == id); + var query = repository.QueryT.Where(x => x.ContentTypeId == id); var content = repository.GetByPublishedVersion(query); uow.Complete(); return content; @@ -450,7 +450,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Level == level && x.Trashed == false); + var query = repository.QueryT.Where(x => x.Level == level && x.Trashed == false); var items = repository.GetByQuery(query); uow.Complete(); return items; @@ -557,7 +557,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == id); + var query = repository.QueryT.Where(x => x.ParentId == id); var children = repository.GetByQuery(query).OrderBy(x => x.SortOrder); uow.Complete(); return children; @@ -575,7 +575,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == id && x.Published); + var query = repository.QueryT.Where(x => x.ParentId == id && x.Published); var children = repository.GetByQuery(query).OrderBy(x => x.SortOrder); uow.Complete(); return children; @@ -602,7 +602,7 @@ namespace Umbraco.Core.Services var repository = uow.CreateRepository(); var filterQuery = filter.IsNullOrWhiteSpace() ? null - : repository.Query.Where(x => x.Name.Contains(filter)); + : repository.QueryT.Where(x => x.Name.Contains(filter)); return GetPagedChildren(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery); } } @@ -630,7 +630,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; //if the id is System Root, then just get all - NO! does not make sense! //if (id != Constants.System.Root) query.Where(x => x.ParentId == id); @@ -659,7 +659,7 @@ namespace Umbraco.Core.Services var repository = uow.CreateRepository(); var filterQuery = filter.IsNullOrWhiteSpace() ? null - : repository.Query.Where(x => x.Name.Contains(filter)); + : repository.QueryT.Where(x => x.Name.Contains(filter)); return GetPagedDescendants(id, pageIndex, pageSize, out totalChildren, orderBy, orderDirection, true, filterQuery); } } @@ -686,7 +686,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; //if the id is System Root, then just get all if (id != Constants.System.Root) query.Where(x => x.Path.SqlContains($",{id},", TextColumnType.NVarchar)); @@ -708,7 +708,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == parentId && x.Name.Contains(name)); + var query = repository.QueryT.Where(x => x.ParentId == parentId && x.Name.Contains(name)); var children = repository.GetByQuery(query); uow.Complete(); return children; @@ -733,7 +733,7 @@ namespace Umbraco.Core.Services return Enumerable.Empty(); } var pathMatch = content.Path + ","; - var query = repository.Query.Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch)); + var query = repository.QueryT.Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch)); var descendants = repository.GetByQuery(query); uow.Complete(); return descendants; @@ -752,7 +752,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); var pathMatch = content.Path + ","; - var query = repository.Query.Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch)); + var query = repository.QueryT.Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch)); var descendants = repository.GetByQuery(query); uow.Complete(); return descendants; @@ -818,7 +818,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == Constants.System.Root); + var query = repository.QueryT.Where(x => x.ParentId == Constants.System.Root); var items = repository.GetByQuery(query); uow.Complete(); return items; @@ -859,7 +859,7 @@ namespace Umbraco.Core.Services private IEnumerable GetContentForExpiration(IDatabaseUnitOfWork uow) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Published && x.ExpireDate <= DateTime.Now); + var query = repository.QueryT.Where(x => x.Published && x.ExpireDate <= DateTime.Now); return repository.GetByQuery(query); } @@ -881,7 +881,7 @@ namespace Umbraco.Core.Services private IEnumerable GetContentForRelease(IDatabaseUnitOfWork uow) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Published == false && x.ReleaseDate <= DateTime.Now); + var query = repository.QueryT.Where(x => x.Published == false && x.ReleaseDate <= DateTime.Now); return repository.GetByQuery(query); } @@ -896,7 +896,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); var bin = $"{Constants.System.Root},{Constants.System.RecycleBinContent},"; - var query = repository.Query.Where(x => x.Path.StartsWith(bin)); + var query = repository.QueryT.Where(x => x.Path.StartsWith(bin)); var content = repository.GetByQuery(query); uow.Complete(); return content; @@ -924,7 +924,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Published && x.Id == id && x.Trashed == false); + var query = repository.QueryT.Where(x => x.Published && x.Id == id && x.Trashed == false); var count = repository.Count(query); uow.Complete(); return count > 0; @@ -1613,7 +1613,7 @@ namespace Umbraco.Core.Services return; // causes rollback // emptying the recycle bin means deleting whetever is in there - do it properly! - var query = repository.Query.Where(x => x.ParentId == Constants.System.RecycleBinContent); + var query = repository.QueryT.Where(x => x.ParentId == Constants.System.RecycleBinContent); var contents = repository.GetByQuery(query).ToArray(); foreach (var content in contents) { @@ -1897,7 +1897,7 @@ namespace Umbraco.Core.Services internal IEnumerable GetPublishedDescendantsLocked(IContentRepository repository, IContent content) { var pathMatch = content.Path + ","; - var query = repository.Query.Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch) /*&& x.Trashed == false*/); + var query = repository.QueryT.Where(x => x.Id != content.Id && x.Path.StartsWith(pathMatch) /*&& x.Trashed == false*/); var contents = repository.GetByPublishedVersion(query); // beware! contents contains all published version below content @@ -2512,7 +2512,7 @@ namespace Umbraco.Core.Services uow.WriteLock(Constants.Locks.ContentTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ContentTypeId == contentTypeId); + var query = repository.QueryT.Where(x => x.ContentTypeId == contentTypeId); var contents = repository.GetByQuery(query).ToArray(); if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(contents), this)) @@ -2530,7 +2530,7 @@ namespace Umbraco.Core.Services // if current content has children, move them to trash var c = content; - var childQuery = repository.Query.Where(x => x.Path.StartsWith(c.Path)); + var childQuery = repository.QueryT.Where(x => x.Path.StartsWith(c.Path)); var children = repository.GetByQuery(childQuery); foreach (var child in children.Where(x => x.ContentTypeId != contentTypeId)) { @@ -2567,7 +2567,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.ContentTypes); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Alias == contentTypeAlias); + var query = repository.QueryT.Where(x => x.Alias == contentTypeAlias); var contentType = repository.GetByQuery(query).FirstOrDefault(); if (contentType == null) diff --git a/src/Umbraco.Core/Services/ContentTypeServiceBase.cs b/src/Umbraco.Core/Services/ContentTypeServiceBase.cs index 6b4d790ca1..c50dea2d62 100644 --- a/src/Umbraco.Core/Services/ContentTypeServiceBase.cs +++ b/src/Umbraco.Core/Services/ContentTypeServiceBase.cs @@ -377,7 +377,7 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); uow.ReadLock(ReadLockIds); - var query = repo.Query.Where(x => x.ParentId == id); + var query = repo.QueryT.Where(x => x.ParentId == id); var items = repo.GetByQuery(query); uow.Complete(); return items; @@ -392,7 +392,7 @@ namespace Umbraco.Core.Services uow.ReadLock(ReadLockIds); var found = Get(id); if (found == null) return Enumerable.Empty(); - var query = repo.Query.Where(x => x.ParentId == found.Id); + var query = repo.QueryT.Where(x => x.ParentId == found.Id); var items = repo.GetByQuery(query); uow.Complete(); return items; @@ -405,7 +405,7 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); uow.ReadLock(ReadLockIds); - var query = repo.Query.Where(x => x.ParentId == id); + var query = repo.QueryT.Where(x => x.ParentId == id); var count = repo.Count(query); uow.Complete(); return count > 0; @@ -420,7 +420,7 @@ namespace Umbraco.Core.Services uow.ReadLock(ReadLockIds); var found = Get(id); if (found == null) return false; - var query = repo.Query.Where(x => x.ParentId == found.Id); + var query = repo.QueryT.Where(x => x.ParentId == found.Id); var count = repo.Count(query); uow.Complete(); return count > 0; @@ -442,7 +442,7 @@ namespace Umbraco.Core.Services while (ids.Count > 0) { var i = ids.Pop(); - var query = repo.Query.Where(x => x.ParentId == i); + var query = repo.QueryT.Where(x => x.ParentId == i); var result = repo.GetByQuery(query).ToArray(); foreach (var c in result) @@ -497,7 +497,7 @@ namespace Umbraco.Core.Services { var repo = uow.CreateRepository(); uow.ReadLock(ReadLockIds); - var count = repo.Count(repo.Query); + var count = repo.Count(repo.QueryT); uow.Complete(); return count; } diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs index c763628b68..3de9e769ea 100644 --- a/src/Umbraco.Core/Services/DataTypeService.cs +++ b/src/Umbraco.Core/Services/DataTypeService.cs @@ -196,7 +196,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var def = repository.GetByQuery(repository.Query.Where(x => x.Name == name)).FirstOrDefault(); + var def = repository.GetByQuery(repository.QueryT.Where(x => x.Name == name)).FirstOrDefault(); uow.Complete(); return def; } @@ -228,7 +228,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Key == id); + var query = repository.QueryT.Where(x => x.Key == id); var definition = repository.GetByQuery(query).FirstOrDefault(); uow.Complete(); return definition; @@ -245,7 +245,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.PropertyEditorAlias == propertyEditorAlias); + var query = repository.QueryT.Where(x => x.PropertyEditorAlias == propertyEditorAlias); var definitions = repository.GetByQuery(query); uow.Complete(); return definitions; diff --git a/src/Umbraco.Core/Services/ExternalLoginService.cs b/src/Umbraco.Core/Services/ExternalLoginService.cs index 6a0d2b1c14..cbbc3d5d47 100644 --- a/src/Umbraco.Core/Services/ExternalLoginService.cs +++ b/src/Umbraco.Core/Services/ExternalLoginService.cs @@ -25,7 +25,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repo = uow.CreateRepository(); - var ident = repo.GetByQuery(repo.Query.Where(x => x.UserId == userId)); + var ident = repo.GetByQuery(repo.QueryT.Where(x => x.UserId == userId)); uow.Complete(); return ident; } @@ -42,7 +42,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repo = uow.CreateRepository(); - var idents = repo.GetByQuery(repo.Query + var idents = repo.GetByQuery(repo.QueryT .Where(x => x.ProviderKey == login.ProviderKey && x.LoginProvider == login.LoginProvider)); uow.Complete(); return idents; diff --git a/src/Umbraco.Core/Services/FileService.cs b/src/Umbraco.Core/Services/FileService.cs index dd089d1072..09a59282d5 100644 --- a/src/Umbraco.Core/Services/FileService.cs +++ b/src/Umbraco.Core/Services/FileService.cs @@ -438,7 +438,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Key == id); + var query = repository.QueryT.Where(x => x.Key == id); var template = repository.GetByQuery(query).SingleOrDefault(); uow.Complete(); return template; diff --git a/src/Umbraco.Core/Services/LocalizationService.cs b/src/Umbraco.Core/Services/LocalizationService.cs index 8af730e677..8e09e6b0f7 100644 --- a/src/Umbraco.Core/Services/LocalizationService.cs +++ b/src/Umbraco.Core/Services/LocalizationService.cs @@ -165,7 +165,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == parentId); + var query = repository.QueryT.Where(x => x.ParentId == parentId); var items = repository.GetByQuery(query).ToArray(); //ensure the lazy Language callback is assigned items.ForEach(EnsureDictionaryItemLanguageCallback); @@ -201,7 +201,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == null); + var query = repository.QueryT.Where(x => x.ParentId == null); var items = repository.GetByQuery(query).ToArray(); //ensure the lazy Language callback is assigned items.ForEach(EnsureDictionaryItemLanguageCallback); diff --git a/src/Umbraco.Core/Services/MacroService.cs b/src/Umbraco.Core/Services/MacroService.cs index b20323cfef..0ee3f33ace 100644 --- a/src/Umbraco.Core/Services/MacroService.cs +++ b/src/Umbraco.Core/Services/MacroService.cs @@ -54,7 +54,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var q = repository.Query.Where(x => x.Alias == alias); + var q = repository.QueryT.Where(x => x.Alias == alias); var macro = repository.GetByQuery(q).FirstOrDefault(); uow.Complete(); return macro; diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs index 1f1aa274dc..dbbdbea1be 100644 --- a/src/Umbraco.Core/Services/MediaService.cs +++ b/src/Umbraco.Core/Services/MediaService.cs @@ -315,7 +315,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Key == key); + var query = repository.QueryT.Where(x => x.Key == key); var media = repository.GetByQuery(query).SingleOrDefault(); uow.Complete(); return media; @@ -333,7 +333,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ContentTypeId == id); + var query = repository.QueryT.Where(x => x.ContentTypeId == id); var items = repository.GetByQuery(query); uow.Complete(); return items; @@ -352,7 +352,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Level == level && x.Trashed == false); + var query = repository.QueryT.Where(x => x.Level == level && x.Trashed == false); var items = repository.GetByQuery(query); uow.Complete(); return items; @@ -442,7 +442,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == id); + var query = repository.QueryT.Where(x => x.ParentId == id); var children = repository.GetByQuery(query).OrderBy(x => x.SortOrder); uow.Complete(); return children; @@ -495,7 +495,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; //if the id is System Root, then just get all - NO! does not make sense! //if (id != Constants.System.Root) query.Where(x => x.ParentId == id); @@ -552,7 +552,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; //if the id is System Root, then just get all if (id != Constants.System.Root) query.Where(x => x.Path.SqlContains($",{id},", TextColumnType.NVarchar)); @@ -580,7 +580,7 @@ namespace Umbraco.Core.Services return Enumerable.Empty(); } var pathMatch = media.Path + ","; - var query = repository.Query.Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch)); + var query = repository.QueryT.Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch)); var descendants = repository.GetByQuery(query); uow.Complete(); return descendants; @@ -599,7 +599,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); var pathMatch = media.Path + ","; - var query = repository.Query.Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch)); + var query = repository.QueryT.Where(x => x.Id != media.Id && x.Path.StartsWith(pathMatch)); var descendants = repository.GetByQuery(query); uow.Complete(); return descendants; @@ -641,7 +641,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == Constants.System.Root); + var query = repository.QueryT.Where(x => x.ParentId == Constants.System.Root); var items = repository.GetByQuery(query); uow.Complete(); return items; @@ -659,7 +659,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); var bin = $"{Constants.System.Root},{Constants.System.RecycleBinMedia},"; - var query = repository.Query.Where(x => x.Path.StartsWith(bin)); + var query = repository.QueryT.Where(x => x.Path.StartsWith(bin)); var medias = repository.GetByQuery(query); uow.Complete(); return medias; @@ -676,7 +676,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == id); + var query = repository.QueryT.Where(x => x.ParentId == id); var count = repository.Count(query); uow.Complete(); return count > 0; @@ -1104,7 +1104,7 @@ namespace Umbraco.Core.Services return; // causes rollback // emptying the recycle bin means deleting whetever is in there - do it properly! - var query = repository.Query.Where(x => x.ParentId == Constants.System.RecycleBinMedia); + var query = repository.QueryT.Where(x => x.ParentId == Constants.System.RecycleBinMedia); var medias = repository.GetByQuery(query).ToArray(); foreach (var media in medias) { @@ -1342,7 +1342,7 @@ namespace Umbraco.Core.Services uow.WriteLock(Constants.Locks.MediaTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ContentTypeId == mediaTypeId); + var query = repository.QueryT.Where(x => x.ContentTypeId == mediaTypeId); var medias = repository.GetByQuery(query).ToArray(); if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(medias), this)) @@ -1354,7 +1354,7 @@ namespace Umbraco.Core.Services { // if current media has children, move them to trash var m = media; - var childQuery = repository.Query.Where(x => x.Path.StartsWith(m.Path)); + var childQuery = repository.QueryT.Where(x => x.Path.StartsWith(m.Path)); var children = repository.GetByQuery(childQuery); foreach (var child in children.Where(x => x.ContentTypeId != mediaTypeId)) { @@ -1391,7 +1391,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MediaTypes); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Alias == mediaTypeAlias); + var query = repository.QueryT.Where(x => x.Alias == mediaTypeAlias); var mediaType = repository.GetByQuery(query).FirstOrDefault(); if (mediaType == null) diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index a6906a7edb..43453470e7 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -64,21 +64,21 @@ namespace Umbraco.Core.Services switch (countType) { case MemberCountType.All: - query = repository.Query; + query = repository.QueryT; break; case MemberCountType.Online: var fromDate = DateTime.Now.AddMinutes(-Membership.UserIsOnlineTimeWindow); - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.LastLoginDate && ((Member)x).DateTimePropertyValue > fromDate); break; case MemberCountType.LockedOut: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.IsLockedOut && ((Member)x).BoolPropertyValue); break; case MemberCountType.Approved: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == Constants.Conventions.Member.IsApproved && ((Member)x).BoolPropertyValue); break; @@ -344,7 +344,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Key == id); + var query = repository.QueryT.Where(x => x.Key == id); var member = repository.GetByQuery(query).FirstOrDefault(); uow.Complete(); return member; @@ -383,7 +383,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = memberTypeAlias == null ? null : repository.Query.Where(x => x.ContentTypeAlias == memberTypeAlias); + var query = memberTypeAlias == null ? null : repository.QueryT.Where(x => x.ContentTypeAlias == memberTypeAlias); var members = repository.GetPagedResultsByQuery(query, pageIndex, pageSize, out totalRecords, orderBy, orderDirection, orderBySystemField, filter); uow.Complete(); return members; @@ -419,7 +419,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Email.Equals(email)); + var query = repository.QueryT.Where(x => x.Email.Equals(email)); var member = repository.GetByQuery(query).FirstOrDefault(); uow.Complete(); return member; @@ -441,7 +441,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Username.Equals(username)); + var query = repository.QueryT.Where(x => x.Username.Equals(username)); var member = repository.GetByQuery(query).FirstOrDefault(); uow.Complete(); return member; @@ -459,7 +459,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ContentTypeAlias == memberTypeAlias); + var query = repository.QueryT.Where(x => x.ContentTypeAlias == memberTypeAlias); var members = repository.GetByQuery(query); uow.Complete(); return members; @@ -478,7 +478,7 @@ namespace Umbraco.Core.Services uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); repository.Get(memberTypeId); - var query = repository.Query.Where(x => x.ContentTypeId == memberTypeId); + var query = repository.QueryT.Where(x => x.ContentTypeId == memberTypeId); var members = repository.GetByQuery(query); uow.Complete(); return members; @@ -535,7 +535,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; switch (matchType) { @@ -579,7 +579,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; switch (matchType) { @@ -623,7 +623,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; switch (matchType) { @@ -670,25 +670,25 @@ namespace Umbraco.Core.Services switch (matchType) { case StringPropertyMatchType.Exact: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlEquals(value, TextColumnType.NText) || ((Member)x).ShortStringPropertyValue.SqlEquals(value, TextColumnType.NVarchar))); break; case StringPropertyMatchType.Contains: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlContains(value, TextColumnType.NText) || ((Member)x).ShortStringPropertyValue.SqlContains(value, TextColumnType.NVarchar))); break; case StringPropertyMatchType.StartsWith: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlStartsWith(value, TextColumnType.NText) || ((Member)x).ShortStringPropertyValue.SqlStartsWith(value, TextColumnType.NVarchar))); break; case StringPropertyMatchType.EndsWith: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && (((Member)x).LongStringPropertyValue.SqlEndsWith(value, TextColumnType.NText) || ((Member)x).ShortStringPropertyValue.SqlEndsWith(value, TextColumnType.NVarchar))); @@ -721,27 +721,27 @@ namespace Umbraco.Core.Services switch (matchType) { case ValuePropertyMatchType.Exact: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue == value); break; case ValuePropertyMatchType.GreaterThan: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue > value); break; case ValuePropertyMatchType.LessThan: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue < value); break; case ValuePropertyMatchType.GreaterThanOrEqualTo: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue >= value); break; case ValuePropertyMatchType.LessThanOrEqualTo: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).IntegerPropertyValue <= value); break; @@ -767,7 +767,7 @@ namespace Umbraco.Core.Services { uow.ReadLock(Constants.Locks.MemberTree); var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => + var query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).BoolPropertyValue == value); @@ -795,27 +795,27 @@ namespace Umbraco.Core.Services switch (matchType) { case ValuePropertyMatchType.Exact: - query = repository.Query.Where( x => + query = repository.QueryT.Where( x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue == value); break; case ValuePropertyMatchType.GreaterThan: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue > value); break; case ValuePropertyMatchType.LessThan: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue < value); break; case ValuePropertyMatchType.GreaterThanOrEqualTo: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue >= value); break; case ValuePropertyMatchType.LessThanOrEqualTo: - query = repository.Query.Where(x => + query = repository.QueryT.Where(x => ((Member)x).PropertyTypeAlias == propertyTypeAlias && ((Member)x).DateTimePropertyValue <= value); break; @@ -1050,7 +1050,7 @@ namespace Umbraco.Core.Services throw new InvalidOperationException("The role " + roleName + " is currently assigned to members"); } - var query = repository.Query.Where(g => g.Name == roleName); + var query = repository.QueryT.Where(g => g.Name == roleName); var found = repository.GetByQuery(query).ToArray(); foreach (var memberGroup in found) @@ -1298,7 +1298,7 @@ namespace Umbraco.Core.Services var repository = uow.CreateRepository(); //TODO: What about content that has the contenttype as part of its composition? - var query = repository.Query.Where(x => x.ContentTypeId == memberTypeId); + var query = repository.QueryT.Where(x => x.ContentTypeId == memberTypeId); var members = repository.GetByQuery(query).ToArray(); if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs(members), this)) diff --git a/src/Umbraco.Core/Services/MigrationEntryService.cs b/src/Umbraco.Core/Services/MigrationEntryService.cs index fcfab9bcb9..ad44e619cd 100644 --- a/src/Umbraco.Core/Services/MigrationEntryService.cs +++ b/src/Umbraco.Core/Services/MigrationEntryService.cs @@ -73,7 +73,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repo = uow.CreateRepository(); - var query = repo.Query + var query = repo.QueryT .Where(x => x.MigrationName.ToUpper() == migrationName.ToUpper()); var entries = repo.GetByQuery(query); uow.Complete(); diff --git a/src/Umbraco.Core/Services/PackagingService.cs b/src/Umbraco.Core/Services/PackagingService.cs index 692813a0df..0c6b2a7873 100644 --- a/src/Umbraco.Core/Services/PackagingService.cs +++ b/src/Umbraco.Core/Services/PackagingService.cs @@ -786,7 +786,7 @@ namespace Umbraco.Core.Services using (var uow = _uowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Alias == contentTypeAlias); + var query = repository.QueryT.Where(x => x.Alias == contentTypeAlias); var types = repository.GetByQuery(query).ToArray(); if (types.Any() == false) diff --git a/src/Umbraco.Core/Services/RelationService.cs b/src/Umbraco.Core/Services/RelationService.cs index 3cdcb565b2..5ae0f6ff02 100644 --- a/src/Umbraco.Core/Services/RelationService.cs +++ b/src/Umbraco.Core/Services/RelationService.cs @@ -65,7 +65,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Alias == alias); + var query = repository.QueryT.Where(x => x.Alias == alias); var type = repository.GetByQuery(query).FirstOrDefault(); uow.Complete(); return type; @@ -108,7 +108,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.RelationTypeId == relationTypeId); + var query = repository.QueryT.Where(x => x.RelationTypeId == relationTypeId); var relations = repository.GetByQuery(query); uow.Complete(); return relations; @@ -141,7 +141,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == id); + var query = repository.QueryT.Where(x => x.ParentId == id); var relations = repository.GetByQuery(query); uow.Complete(); return relations; @@ -179,7 +179,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ChildId == id); + var query = repository.QueryT.Where(x => x.ChildId == id); var relations = repository.GetByQuery(query); uow.Complete(); return relations; @@ -218,7 +218,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ChildId == id || x.ParentId == id); + var query = repository.QueryT.Where(x => x.ChildId == id || x.ParentId == id); var relations = repository.GetByQuery(query); uow.Complete(); return relations; @@ -231,7 +231,7 @@ namespace Umbraco.Core.Services { var repository = uow.CreateRepository(); - var rtQuery = repository.Query.Where(x => x.Alias == relationTypeAlias); + var rtQuery = repository.QueryT.Where(x => x.Alias == relationTypeAlias); var relationType = repository.GetByQuery(rtQuery).FirstOrDefault(); if (relationType == null) { @@ -240,7 +240,7 @@ namespace Umbraco.Core.Services } var relationRepo = uow.CreateRepository(); - var query = relationRepo.Query.Where(x => (x.ChildId == id || x.ParentId == id) && x.RelationTypeId == relationType.Id); + var query = relationRepo.QueryT.Where(x => (x.ChildId == id || x.ParentId == id) && x.RelationTypeId == relationType.Id); var relations = relationRepo.GetByQuery(query); uow.Complete(); return relations; @@ -258,7 +258,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Name == relationTypeName); + var query = repository.QueryT.Where(x => x.Name == relationTypeName); var relationTypes = repository.GetByQuery(query); if (relationTypes.Any()) { @@ -284,7 +284,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Alias == relationTypeAlias); + var query = repository.QueryT.Where(x => x.Alias == relationTypeAlias); var relationTypes = repository.GetByQuery(query); if (relationTypes.Any()) { @@ -309,7 +309,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.RelationTypeId == relationTypeId); + var query = repository.QueryT.Where(x => x.RelationTypeId == relationTypeId); var relations = repository.GetByQuery(query); uow.Complete(); return relations; @@ -476,7 +476,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.RelationTypeId == relationType.Id); + var query = repository.QueryT.Where(x => x.RelationTypeId == relationType.Id); var has = repository.GetByQuery(query).Any(); uow.Complete(); return has; @@ -493,7 +493,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == id || x.ChildId == id); + var query = repository.QueryT.Where(x => x.ParentId == id || x.ChildId == id); var isRelated = repository.GetByQuery(query).Any(); uow.Complete(); return isRelated; @@ -511,7 +511,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == parentId && x.ChildId == childId); + var query = repository.QueryT.Where(x => x.ParentId == parentId && x.ChildId == childId); var areRelated = repository.GetByQuery(query).Any(); uow.Complete(); return areRelated; @@ -547,7 +547,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.ParentId == parentId && x.ChildId == childId && x.RelationTypeId == relationType.Id); + var query = repository.QueryT.Where(x => x.ParentId == parentId && x.ChildId == childId && x.RelationTypeId == relationType.Id); var areRelated = repository.GetByQuery(query).Any(); uow.Complete(); return areRelated; @@ -664,7 +664,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.RelationTypeId == relationType.Id); + var query = repository.QueryT.Where(x => x.RelationTypeId == relationType.Id); relations.AddRange(repository.GetByQuery(query).ToList()); foreach (var relation in relations) @@ -686,7 +686,7 @@ namespace Umbraco.Core.Services foreach (var relationTypeId in relationTypeIds) { int id = relationTypeId; - var query = repository.Query.Where(x => x.RelationTypeId == id); + var query = repository.QueryT.Where(x => x.RelationTypeId == id); relations.AddRange(repository.GetByQuery(query).ToList()); } uow.Complete(); diff --git a/src/Umbraco.Core/Services/RepositoryService.cs b/src/Umbraco.Core/Services/RepositoryService.cs index 4473619b89..8656e52ea7 100644 --- a/src/Umbraco.Core/Services/RepositoryService.cs +++ b/src/Umbraco.Core/Services/RepositoryService.cs @@ -1,7 +1,6 @@ using System; using Umbraco.Core.Events; using Umbraco.Core.Logging; -using Umbraco.Core.Persistence; using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.UnitOfWork; @@ -14,8 +13,8 @@ namespace Umbraco.Core.Services { protected ILogger Logger { get; private set; } protected IEventMessagesFactory EventMessagesFactory { get; private set; } - protected IDatabaseUnitOfWorkProvider UowProvider { get; private set; } - + protected IDatabaseUnitOfWorkProvider UowProvider { get; } + protected RepositoryService(IDatabaseUnitOfWorkProvider provider, ILogger logger, IEventMessagesFactory eventMessagesFactory) { if (provider == null) throw new ArgumentNullException(nameof(provider)); diff --git a/src/Umbraco.Core/Services/TaskService.cs b/src/Umbraco.Core/Services/TaskService.cs index 900f993033..319a441df4 100644 --- a/src/Umbraco.Core/Services/TaskService.cs +++ b/src/Umbraco.Core/Services/TaskService.cs @@ -23,7 +23,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repo = uow.CreateRepository(); - var type = repo.GetByQuery(repo.Query.Where(x => x.Alias == taskTypeAlias)).FirstOrDefault(); + var type = repo.GetByQuery(repo.QueryT.Where(x => x.Alias == taskTypeAlias)).FirstOrDefault(); uow.Complete(); return type; } diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 3d22c3038a..4042d9fcec 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -213,7 +213,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Email.Equals(email)); + var query = repository.QueryT.Where(x => x.Email.Equals(email)); var user = repository.GetByQuery(query).FirstOrDefault(); uow.Complete(); return user; @@ -230,7 +230,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Username.Equals(username)); + var query = repository.QueryT.Where(x => x.Username.Equals(username)); var user = repository.GetByQuery(query).FirstOrDefault(); uow.Complete(); return user; @@ -389,7 +389,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; switch (matchType) { @@ -432,7 +432,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query; + var query = repository.QueryT; switch (matchType) { @@ -481,7 +481,7 @@ namespace Umbraco.Core.Services switch (countType) { case MemberCountType.All: - query = repository.Query; + query = repository.QueryT; break; case MemberCountType.Online: throw new NotImplementedException(); @@ -493,10 +493,10 @@ namespace Umbraco.Core.Services // ((Member)x).DateTimePropertyValue > fromDate); //return repository.GetCountByQuery(query); case MemberCountType.LockedOut: - query = repository.Query.Where(x => x.IsLockedOut); + query = repository.QueryT.Where(x => x.IsLockedOut); break; case MemberCountType.Approved: - query = repository.Query.Where(x => x.IsApproved); + query = repository.QueryT.Where(x => x.IsApproved); break; default: throw new ArgumentOutOfRangeException("countType"); @@ -640,7 +640,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Alias == alias); + var query = repository.QueryT.Where(x => x.Alias == alias); var type = repository.GetByQuery(query).SingleOrDefault(); uow.Complete(); return type; @@ -673,7 +673,7 @@ namespace Umbraco.Core.Services using (var uow = UowProvider.CreateUnitOfWork()) { var repository = uow.CreateRepository(); - var query = repository.Query.Where(x => x.Name == name); + var query = repository.QueryT.Where(x => x.Name == name); var type = repository.GetByQuery(query).SingleOrDefault(); uow.Complete(); return type; diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs index 00ddb28739..07aa8a1b1e 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs @@ -413,7 +413,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Level == 2); + var query = repository.QueryT.Where(x => x.Level == 2); var result = repository.GetByQuery(query); // Assert @@ -476,7 +476,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Name.Contains("Text")); + var query = repository.QueryT.Where(x => x.Name.Contains("Text")); long totalRecords; try @@ -511,7 +511,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Level == 2); + var query = repository.QueryT.Where(x => x.Level == 2); long totalRecords; try @@ -543,7 +543,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Level == 2); + var query = repository.QueryT.Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 1, 1, out totalRecords, "Name", Direction.Ascending, true); @@ -564,7 +564,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Level == 2); + var query = repository.QueryT.Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 0, 2, out totalRecords, "Name", Direction.Ascending, true); @@ -585,7 +585,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Level == 2); + var query = repository.QueryT.Where(x => x.Level == 2); long totalRecords; var result = repository.GetPagedResultsByQuery(query, 0, 1, out totalRecords, "Name", Direction.Descending, true); @@ -606,7 +606,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Level == 2); + var query = repository.QueryT.Where(x => x.Level == 2); long totalRecords; @@ -630,7 +630,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Level == 2); + var query = repository.QueryT.Where(x => x.Level == 2); long totalRecords; @@ -714,7 +714,7 @@ namespace Umbraco.Tests.Persistence.Repositories var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act int level = 2; - var query = repository.Query.Where(x => x.Level == level); + var query = repository.QueryT.Where(x => x.Level == level); var result = repository.Count(query); // Assert @@ -753,7 +753,7 @@ namespace Umbraco.Tests.Persistence.Repositories ContentTypeRepository contentTypeRepository; var repository = CreateRepository(unitOfWork, out contentTypeRepository); // Act - var query = repository.Query.Where(x => x.Key == new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); + var query = repository.QueryT.Where(x => x.Key == new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); var content = repository.GetByQuery(query).SingleOrDefault(); // Assert diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs index 529b4fe33f..5920caad9b 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs @@ -529,7 +529,7 @@ namespace Umbraco.Tests.Persistence.Repositories unitOfWork.Flush(); // Act - var contentTypes = repository.GetByQuery(repository.Query.Where(x => x.ParentId == contentType.Id)); + var contentTypes = repository.GetByQuery(repository.QueryT.Where(x => x.ParentId == contentType.Id)); // Assert Assert.That(contentTypes.Count(), Is.EqualTo(3)); diff --git a/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs b/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs index c9c9072f86..6db5202fa2 100644 --- a/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs +++ b/src/Umbraco.Web/PublishedCache/NuCache/FacadeService.cs @@ -1222,7 +1222,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); ((ContentRepository) repository).SetNoCachePolicy(); - var query = repository.Query; + var query = _uowProvider.DatabaseContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1292,7 +1292,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); ((MediaRepository)repository).SetNoCachePolicy(); - var query = repository.Query; + var query = _uowProvider.DatabaseContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1352,7 +1352,7 @@ WHERE cmsContentNu.nodeId IN ( // insert back - if anything fails the transaction will rollback var repository = uow.CreateRepository(); ((MemberRepository)repository).SetNoCachePolicy(); - var query = repository.Query; + var query = _uowProvider.DatabaseContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) diff --git a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs index 88372c9872..3358c27212 100644 --- a/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs +++ b/src/Umbraco.Web/PublishedCache/XmlPublishedCache/XmlStore.cs @@ -1812,7 +1812,7 @@ WHERE cmsContentXml.nodeId IN ( } // insert back - if anything fails the transaction will rollback - var query = repository.Query.Where(x => x.Published); + var query = _uowProvider.DatabaseContext.Query().Where(x => x.Published); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1884,7 +1884,7 @@ WHERE cmsPreviewXml.nodeId IN ( } // insert back - if anything fails the transaction will rollback - var query = repository.Query; + var query = _uowProvider.DatabaseContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -1960,7 +1960,7 @@ WHERE cmsContentXml.nodeId IN ( } // insert back - if anything fails the transaction will rollback - var query = repository.Query; + var query = _uowProvider.DatabaseContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...) @@ -2030,7 +2030,7 @@ WHERE cmsContentXml.nodeId IN ( } // insert back - if anything fails the transaction will rollback - var query = repository.Query; + var query = _uowProvider.DatabaseContext.Query(); if (contentTypeIds != null && contentTypeIdsA.Length > 0) query = query.WhereIn(x => x.ContentTypeId, contentTypeIdsA); // assume number of ctypes won't blow IN(...)