Dao: any replaced with containts

This commit is contained in:
pavelbannov 2020-12-16 15:03:43 +03:00
parent 4a1260e828
commit 334c766052
4 changed files with 90 additions and 111 deletions

View File

@ -174,7 +174,7 @@ namespace ASC.Files.Core.Data
{ {
if (fileIds == null || !fileIds.Any()) return new List<File<int>>(); if (fileIds == null || !fileIds.Any()) return new List<File<int>>();
var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion) var query = GetFileQuery(r => fileIds.Contains(r.Id) && r.CurrentVersion)
.AsNoTracking(); .AsNoTracking();
return FromQueryWithShared(query).Select(ToFile).ToList(); return FromQueryWithShared(query).Select(ToFile).ToList();
@ -184,7 +184,7 @@ namespace ASC.Files.Core.Data
{ {
if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<int>>(); if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List<File<int>>();
var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion).AsNoTracking(); var query = GetFileQuery(r => fileIds.Contains(r.Id) && r.CurrentVersion).AsNoTracking();
if (!string.IsNullOrEmpty(searchText)) if (!string.IsNullOrEmpty(searchText))
{ {
@ -192,7 +192,7 @@ namespace ASC.Files.Core.Data
if (FactoryIndexer.TrySelectIds(s => func(s).In(r => r.Id, fileIds.ToArray()), out var searchIds)) if (FactoryIndexer.TrySelectIds(s => func(s).In(r => r.Id, fileIds.ToArray()), out var searchIds))
{ {
query = query.Where(r => searchIds.Any(b => b == r.Id)); query = query.Where(r => searchIds.Contains(r.Id));
} }
else else
{ {
@ -205,7 +205,7 @@ namespace ASC.Files.Core.Data
if (subjectGroup) if (subjectGroup)
{ {
var users = UserManager.GetUsersByGroup(subjectID).Select(u => u.ID).ToArray(); var users = UserManager.GetUsersByGroup(subjectID).Select(u => u.ID).ToArray();
query = query.Where(r => users.Any(b => b == r.CreateBy)); query = query.Where(r => users.Contains(r.CreateBy));
} }
else else
{ {
@ -274,7 +274,7 @@ namespace ASC.Files.Core.Data
if (FactoryIndexer.TrySelectIds(expression, out var searchIds)) if (FactoryIndexer.TrySelectIds(expression, out var searchIds))
{ {
q = q.Where(r => searchIds.Any(a => a == r.Id)); q = q.Where(r => searchIds.Contains(r.Id));
} }
else else
{ {
@ -296,7 +296,7 @@ namespace ASC.Files.Core.Data
if (subjectGroup) if (subjectGroup)
{ {
var users = UserManager.GetUsersByGroup(subjectID).Select(u => u.ID).ToArray(); var users = UserManager.GetUsersByGroup(subjectID).Select(u => u.ID).ToArray();
q = q.Where(r => users.Any(a => a == r.CreateBy)); q = q.Where(r => users.Contains(r.CreateBy));
} }
else else
{ {
@ -445,7 +445,7 @@ namespace ASC.Files.Core.Data
if (parentFoldersIds.Any()) if (parentFoldersIds.Any())
{ {
var folderToUpdate = FilesDbContext.Folders var folderToUpdate = FilesDbContext.Folders
.Where(r => parentFoldersIds.Any(a => a == r.Id)); .Where(r => parentFoldersIds.Contains(r.Id));
foreach (var f in folderToUpdate) foreach (var f in folderToUpdate)
{ {
@ -569,7 +569,7 @@ namespace ASC.Files.Core.Data
if (parentFoldersIds.Any()) if (parentFoldersIds.Any())
{ {
var folderToUpdate = FilesDbContext.Folders var folderToUpdate = FilesDbContext.Folders
.Where(r => parentFoldersIds.Any(a => a == r.Id)); .Where(r => parentFoldersIds.Contains(r.Id));
foreach (var f in folderToUpdate) foreach (var f in folderToUpdate)
{ {
@ -669,7 +669,7 @@ namespace ASC.Files.Core.Data
FilesDbContext.RemoveRange(toDeleteFiles); FilesDbContext.RemoveRange(toDeleteFiles);
var tagsToRemove = Query(FilesDbContext.Tag) var tagsToRemove = Query(FilesDbContext.Tag)
.Where(r => !Query(FilesDbContext.TagLink).Where(a => a.TagId == r.Id).Any()); .Where(r => !Query(FilesDbContext.TagLink).Any(a => a.TagId == r.Id));
FilesDbContext.Tag.RemoveRange(tagsToRemove); FilesDbContext.Tag.RemoveRange(tagsToRemove);
@ -1027,7 +1027,7 @@ namespace ASC.Files.Core.Data
{ {
var toUpdate = Query(FilesDbContext.Files) var toUpdate = Query(FilesDbContext.Files)
.Where(r => r.CurrentVersion) .Where(r => r.CurrentVersion)
.Where(r => fileIds.Any(a => a == r.Id)); .Where(r => fileIds.Contains(r.Id));
foreach (var f in toUpdate) foreach (var f in toUpdate)
{ {
@ -1044,7 +1044,7 @@ namespace ASC.Files.Core.Data
var q = GetFileQuery(r => r.CurrentVersion) var q = GetFileQuery(r => r.CurrentVersion)
.AsNoTracking() .AsNoTracking()
.Join(FilesDbContext.Tree, a => a.FolderId, t => t.FolderId, (file, tree) => new { file, tree }) .Join(FilesDbContext.Tree, a => a.FolderId, t => t.FolderId, (file, tree) => new { file, tree })
.Where(r => parentIds.Any(a => a == r.tree.ParentId)) .Where(r => parentIds.Contains(r.tree.ParentId))
.Select(r => r.file); .Select(r => r.file);
if (!string.IsNullOrEmpty(searchText)) if (!string.IsNullOrEmpty(searchText))
@ -1053,7 +1053,7 @@ namespace ASC.Files.Core.Data
if (FactoryIndexer.TrySelectIds(s => func(s), out var searchIds)) if (FactoryIndexer.TrySelectIds(s => func(s), out var searchIds))
{ {
q = q.Where(r => searchIds.Any(b => b == r.Id)); q = q.Where(r => searchIds.Contains(r.Id));
} }
else else
{ {
@ -1066,7 +1066,7 @@ namespace ASC.Files.Core.Data
if (subjectGroup) if (subjectGroup)
{ {
var users = UserManager.GetUsersByGroup(subjectID).Select(u => u.ID).ToArray(); var users = UserManager.GetUsersByGroup(subjectID).Select(u => u.ID).ToArray();
q = q.Where(r => users.Any(u => u == r.CreateBy)); q = q.Where(r => users.Contains(r.CreateBy));
} }
else else
{ {
@ -1099,7 +1099,7 @@ namespace ASC.Files.Core.Data
{ {
if (FactoryIndexer.TrySelectIds(s => s.MatchAll(searchText), out var ids)) if (FactoryIndexer.TrySelectIds(s => s.MatchAll(searchText), out var ids))
{ {
var query = GetFileQuery(r => r.CurrentVersion && ids.Any(i => i == r.Id)).AsNoTracking(); var query = GetFileQuery(r => r.CurrentVersion && ids.Contains(r.Id)).AsNoTracking();
return FromQueryWithShared(query).Select(ToFile) return FromQueryWithShared(query).Select(ToFile)
.Where( .Where(
f => f =>

View File

@ -149,7 +149,7 @@ namespace ASC.Files.Core.Data
.Distinct(); .Distinct();
var q = FilesDbContext.Tree.AsNoTracking() var q = FilesDbContext.Tree.AsNoTracking()
.Where(r => subq.Any(q => q == r.FolderId)) .Where(r => subq.Contains(r.FolderId))
.OrderByDescending(r => r.Level) .OrderByDescending(r => r.Level)
.Select(r => r.ParentId) .Select(r => r.ParentId)
.FirstOrDefault(); .FirstOrDefault();
@ -187,7 +187,7 @@ namespace ASC.Files.Core.Data
{ {
if (FactoryIndexer.TrySelectIds(s => s.MatchAll(searchText), out var searchIds)) if (FactoryIndexer.TrySelectIds(s => s.MatchAll(searchText), out var searchIds))
{ {
q = q.Where(r => searchIds.Any(a => a == r.Id)); q = q.Where(r => searchIds.Contains(r.Id));
} }
else else
{ {
@ -208,7 +208,7 @@ namespace ASC.Files.Core.Data
if (subjectGroup) if (subjectGroup)
{ {
var users = UserManager.GetUsersByGroup(subjectID).Select(u => u.ID).ToArray(); var users = UserManager.GetUsersByGroup(subjectID).Select(u => u.ID).ToArray();
q = q.Where(r => users.Any(a => a == r.CreateBy)); q = q.Where(r => users.Contains(r.CreateBy));
} }
else else
{ {
@ -227,14 +227,14 @@ namespace ASC.Files.Core.Data
|| filterType == FilterType.ArchiveOnly || filterType == FilterType.MediaOnly) || filterType == FilterType.ArchiveOnly || filterType == FilterType.MediaOnly)
return new List<Folder<int>>(); return new List<Folder<int>>();
var q = GetFolderQuery(r => folderIds.Any(q => q == r.Id)).AsNoTracking(); var q = GetFolderQuery(r => folderIds.Contains(r.Id)).AsNoTracking();
if (searchSubfolders) if (searchSubfolders)
{ {
q = GetFolderQuery() q = GetFolderQuery()
.AsNoTracking() .AsNoTracking()
.Join(FilesDbContext.Tree, r => r.Id, a => a.FolderId, (folder, tree) => new { folder, tree }) .Join(FilesDbContext.Tree, r => r.Id, a => a.FolderId, (folder, tree) => new { folder, tree })
.Where(r => folderIds.Any(q => q == r.tree.ParentId)) .Where(r => folderIds.Contains(r.tree.ParentId))
.Select(r => r.folder); .Select(r => r.folder);
} }
@ -246,7 +246,7 @@ namespace ASC.Files.Core.Data
: s.MatchAll(searchText).In(r => r.Id, folderIds.ToArray()), : s.MatchAll(searchText).In(r => r.Id, folderIds.ToArray()),
out var searchIds)) out var searchIds))
{ {
q = q.Where(r => searchIds.Any(a => a == r.Id)); q = q.Where(r => searchIds.Contains(r.Id));
} }
else else
{ {
@ -260,7 +260,7 @@ namespace ASC.Files.Core.Data
if (subjectGroup) if (subjectGroup)
{ {
var users = UserManager.GetUsersByGroup(subjectID.Value).Select(u => u.ID).ToArray(); var users = UserManager.GetUsersByGroup(subjectID.Value).Select(u => u.ID).ToArray();
q = q.Where(r => users.Any(a => a == r.CreateBy)); q = q.Where(r => users.Contains(r.CreateBy));
} }
else else
{ {
@ -388,8 +388,7 @@ namespace ASC.Files.Core.Data
private bool IsExist(int folderId) private bool IsExist(int folderId)
{ {
return Query(FilesDbContext.Folders).AsNoTracking() return Query(FilesDbContext.Folders).AsNoTracking()
.Where(r => r.Id == folderId) .Any(r => r.Id == folderId);
.Any();
} }
public void DeleteFolder(int id) public void DeleteFolder(int id)
@ -410,7 +409,7 @@ namespace ASC.Files.Core.Data
.Select(r => r.ParentId) .Select(r => r.ParentId)
.FirstOrDefault(); .FirstOrDefault();
var folderToDelete = Query(FilesDbContext.Folders).Where(r => subfolders.Any(a => r.Id == a)); var folderToDelete = Query(FilesDbContext.Folders).Where(r => subfolders.Contains(r.Id));
FilesDbContext.Folders.RemoveRange(folderToDelete); FilesDbContext.Folders.RemoveRange(folderToDelete);
foreach (var f in folderToDelete) foreach (var f in folderToDelete)
@ -418,22 +417,22 @@ namespace ASC.Files.Core.Data
FactoryIndexer.DeleteAsync(f); FactoryIndexer.DeleteAsync(f);
} }
var treeToDelete = FilesDbContext.Tree.Where(r => subfolders.Any(a => r.FolderId == a)); var treeToDelete = FilesDbContext.Tree.Where(r => subfolders.Contains(r.FolderId));
FilesDbContext.Tree.RemoveRange(treeToDelete); FilesDbContext.Tree.RemoveRange(treeToDelete);
var subfoldersStrings = subfolders.Select(r => r.ToString()).ToList(); var subfoldersStrings = subfolders.Select(r => r.ToString()).ToList();
var linkToDelete = Query(FilesDbContext.TagLink) var linkToDelete = Query(FilesDbContext.TagLink)
.Where(r => subfoldersStrings.Any(a => r.EntryId == a)) .Where(r => subfoldersStrings.Contains(r.EntryId))
.Where(r => r.EntryType == FileEntryType.Folder); .Where(r => r.EntryType == FileEntryType.Folder);
FilesDbContext.TagLink.RemoveRange(linkToDelete); FilesDbContext.TagLink.RemoveRange(linkToDelete);
var tagsToRemove = Query(FilesDbContext.Tag) var tagsToRemove = Query(FilesDbContext.Tag)
.Where(r => !Query(FilesDbContext.TagLink).Where(a => a.TagId == r.Id).Any()); .Where(r => !Query(FilesDbContext.TagLink).Any(a => a.TagId == r.Id));
FilesDbContext.Tag.RemoveRange(tagsToRemove); FilesDbContext.Tag.RemoveRange(tagsToRemove);
var securityToDelete = Query(FilesDbContext.Security) var securityToDelete = Query(FilesDbContext.Security)
.Where(r => subfoldersStrings.Any(a => r.EntryId == a)) .Where(r => subfoldersStrings.Contains(r.EntryId))
.Where(r => r.EntryType == FileEntryType.Folder); .Where(r => r.EntryType == FileEntryType.Folder);
FilesDbContext.Security.RemoveRange(securityToDelete); FilesDbContext.Security.RemoveRange(securityToDelete);
@ -499,7 +498,7 @@ namespace ASC.Files.Core.Data
.ToDictionary(r => r.FolderId, r => r.Level); .ToDictionary(r => r.FolderId, r => r.Level);
var toDelete = FilesDbContext.Tree var toDelete = FilesDbContext.Tree
.Where(r => subfolders.Keys.Any(a => a == r.FolderId) && !subfolders.Keys.Any(a => a == r.ParentId)); .Where(r => subfolders.Keys.Contains(r.FolderId) && !subfolders.Keys.Contains(r.ParentId));
FilesDbContext.Tree.RemoveRange(toDelete); FilesDbContext.Tree.RemoveRange(toDelete);
FilesDbContext.SaveChanges(); FilesDbContext.SaveChanges();
@ -622,9 +621,7 @@ namespace ASC.Files.Core.Data
{ {
var exists = FilesDbContext.Tree var exists = FilesDbContext.Tree
.AsNoTracking() .AsNoTracking()
.Where(r => r.ParentId == folderId) .Any(r => r.ParentId == folderId && r.FolderId == to);
.Where(r => r.FolderId == to)
.Any();
if (exists) if (exists)
{ {
@ -710,8 +707,7 @@ namespace ASC.Files.Core.Data
var count = Query(FilesDbContext.Files) var count = Query(FilesDbContext.Files)
.AsNoTracking() .AsNoTracking()
.Distinct() .Distinct()
.Where(r => FilesDbContext.Tree.Where(r => r.ParentId == folderId).Select(r => r.FolderId).Any(b => b == r.FolderId)) .Count(r => FilesDbContext.Tree.Where(r => r.ParentId == folderId).Select(r => r.FolderId).Contains(r.FolderId));
.Count();
return count; return count;
} }
@ -759,7 +755,7 @@ namespace ASC.Files.Core.Data
private void RecalculateFoldersCount(int id) private void RecalculateFoldersCount(int id)
{ {
var toUpdate = Query(FilesDbContext.Folders) var toUpdate = Query(FilesDbContext.Folders)
.Where(r => FilesDbContext.Tree.Where(a => a.FolderId == id).Select(a => a.ParentId).Any(a => a == r.Id)) .Where(r => FilesDbContext.Tree.Where(a => a.FolderId == id).Select(a => a.ParentId).Contains(r.Id))
.ToList(); .ToList();
foreach (var f in toUpdate) foreach (var f in toUpdate)
@ -776,7 +772,7 @@ namespace ASC.Files.Core.Data
public void ReassignFolders(int[] folderIds, Guid newOwnerId) public void ReassignFolders(int[] folderIds, Guid newOwnerId)
{ {
var toUpdate = Query(FilesDbContext.Folders) var toUpdate = Query(FilesDbContext.Folders)
.Where(r => folderIds.Any(a => r.Id == a)); .Where(r => folderIds.Contains(r.Id));
foreach (var f in toUpdate) foreach (var f in toUpdate)
{ {
@ -800,7 +796,7 @@ namespace ASC.Files.Core.Data
if (FactoryIndexer.TrySelectIds(s => s.MatchAll(text), out var ids)) if (FactoryIndexer.TrySelectIds(s => s.MatchAll(text), out var ids))
{ {
var q1 = GetFolderQuery(r => ids.Any(a => r.Id == a)); var q1 = GetFolderQuery(r => ids.Contains(r.Id));
return FromQueryWithShared(q1).Select(ToFolder).ToList(); return FromQueryWithShared(q1).Select(ToFolder).ToList();
} }
@ -1043,17 +1039,13 @@ namespace ASC.Files.Core.Data
Folder = r, Folder = r,
Root = FilesDbContext.Folders Root = FilesDbContext.Folders
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree }) .Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == r.TenantId) .Where(x => x.folder.TenantId == r.TenantId && x.tree.FolderId == r.ParentId)
.Where(x => x.tree.FolderId == r.ParentId)
.OrderByDescending(r => r.tree.Level) .OrderByDescending(r => r.tree.Level)
.Select(r => r.folder) .Select(r => r.folder)
.Take(1) .Take(1)
.FirstOrDefault(), .FirstOrDefault(),
Shared = FilesDbContext.Security Shared = FilesDbContext.Security
.Where(x => x.TenantId == TenantID) .Any(x => x.TenantId == TenantID && x.EntryType == FileEntryType.Folder && x.EntryId == r.Id.ToString())
.Where(r => r.EntryType == FileEntryType.Folder)
.Where(x => x.EntryId == r.Id.ToString())
.Any()
}); });
} }

View File

@ -93,9 +93,8 @@ namespace ASC.Files.Core.Data
public bool IsShared(object entryId, FileEntryType type) public bool IsShared(object entryId, FileEntryType type)
{ {
return Query(FilesDbContext.Security) return Query(FilesDbContext.Security)
.Where(r => r.EntryId == MappingID(entryId).ToString()) .Any(r => r.EntryId == MappingID(entryId).ToString() &&
.Where(r => r.EntryType == type) r.EntryType == type);
.Any();
} }
public void SetShare(FileShareRecord r) public void SetShare(FileShareRecord r)
@ -119,7 +118,7 @@ namespace ASC.Files.Core.Data
.ToList(); .ToList();
folders.AddRange(foldersInt.Select(folderInt => folderInt.ToString())); folders.AddRange(foldersInt.Select(folderInt => folderInt.ToString()));
files.AddRange(Query(FilesDbContext.Files).Where(r => foldersInt.Any(a => a == r.FolderId)).Select(r => r.Id.ToString())); files.AddRange(Query(FilesDbContext.Files).Where(r => foldersInt.Contains(r.FolderId)).Select(r => r.Id.ToString()));
} }
else else
{ {
@ -127,10 +126,10 @@ namespace ASC.Files.Core.Data
} }
var toDelete = FilesDbContext.Security var toDelete = FilesDbContext.Security
.Where(a => a.TenantId == r.Tenant) .Where(a => a.TenantId == r.Tenant &&
.Where(a => folders.Any(b => b == a.EntryId)) folders.Contains(a.EntryId) &&
.Where(a => a.EntryType == FileEntryType.Folder) a.EntryType == FileEntryType.Folder &&
.Where(a => a.Subject == r.Subject); a.Subject == r.Subject);
FilesDbContext.Security.RemoveRange(toDelete); FilesDbContext.Security.RemoveRange(toDelete);
FilesDbContext.SaveChanges(); FilesDbContext.SaveChanges();
@ -144,10 +143,10 @@ namespace ASC.Files.Core.Data
if (0 < files.Count) if (0 < files.Count)
{ {
var toDelete = FilesDbContext.Security var toDelete = FilesDbContext.Security
.Where(a => a.TenantId == r.Tenant) .Where(a => a.TenantId == r.Tenant &&
.Where(a => files.Any(b => b == a.EntryId)) files.Contains(a.EntryId) &&
.Where(a => a.EntryType == FileEntryType.File) a.EntryType == FileEntryType.File &&
.Where(a => a.Subject == r.Subject); a.Subject == r.Subject);
FilesDbContext.Security.RemoveRange(toDelete); FilesDbContext.Security.RemoveRange(toDelete);
FilesDbContext.SaveChanges(); FilesDbContext.SaveChanges();
@ -175,7 +174,7 @@ namespace ASC.Files.Core.Data
public IEnumerable<FileShareRecord> GetShares(IEnumerable<Guid> subjects) public IEnumerable<FileShareRecord> GetShares(IEnumerable<Guid> subjects)
{ {
var q = GetQuery(r => subjects.Any(a => r.Subject == a)); var q = GetQuery(r => subjects.Contains(r.Subject));
return FromQuery(q); return FromQuery(q);
} }
@ -210,11 +209,11 @@ namespace ASC.Files.Core.Data
{ {
var result = new List<FileShareRecord>(); var result = new List<FileShareRecord>();
var q = GetQuery(r => folders.Any(a => a == r.EntryId) && r.EntryType == FileEntryType.Folder); var q = GetQuery(r => folders.Contains(r.EntryId) && r.EntryType == FileEntryType.Folder);
if (files.Any()) if (files.Any())
{ {
q = q.Union(GetQuery(r => files.Any(q => q == r.EntryId) && r.EntryType == FileEntryType.File)); q = q.Union(GetQuery(r => files.Contains(r.EntryId) && r.EntryType == FileEntryType.File));
} }
result.AddRange(FromQuery(q)); result.AddRange(FromQuery(q));
@ -281,13 +280,13 @@ namespace ASC.Files.Core.Data
{ {
var q = Query(FilesDbContext.Security) var q = Query(FilesDbContext.Security)
.Join(FilesDbContext.Tree, r => r.EntryId, a => a.ParentId.ToString(), (security, tree) => new SecurityTreeRecord { DbFilesSecurity = security, DbFolderTree = tree }) .Join(FilesDbContext.Tree, r => r.EntryId, a => a.ParentId.ToString(), (security, tree) => new SecurityTreeRecord { DbFilesSecurity = security, DbFolderTree = tree })
.Where(r => folders.Any(f => f == r.DbFolderTree.FolderId)) .Where(r => folders.Contains(r.DbFolderTree.FolderId) &&
.Where(r => r.DbFilesSecurity.EntryType == FileEntryType.Folder) r.DbFilesSecurity.EntryType == FileEntryType.Folder)
.ToList(); .ToList();
if (0 < files.Count) if (0 < files.Count)
{ {
var q1 = GetQuery(r => files.Any(f => f == r.EntryId) && r.EntryType == FileEntryType.File) var q1 = GetQuery(r => files.Contains(r.EntryId) && r.EntryType == FileEntryType.File)
.Select(r => new SecurityTreeRecord { DbFilesSecurity = r }) .Select(r => new SecurityTreeRecord { DbFilesSecurity = r })
.ToList(); .ToList();
q = q.Union(q1).ToList(); q = q.Union(q1).ToList();

View File

@ -97,8 +97,8 @@ namespace ASC.Files.Core.Data
.Join(FilesDbContext.TagLink, r => r.Id, l => l.TagId, (tag, link) => new TagLinkData { Tag = tag, Link = link }) .Join(FilesDbContext.TagLink, r => r.Id, l => l.TagId, (tag, link) => new TagLinkData { Tag = tag, Link = link })
.Where(r => r.Link.TenantId == r.Tag.TenantId) .Where(r => r.Link.TenantId == r.Tag.TenantId)
.Where(r => r.Tag.Flag == tagType) .Where(r => r.Tag.Flag == tagType)
.Where(r => r.Link.EntryType == FileEntryType.File && filesId.Any(f => r.Link.EntryId == f) .Where(r => r.Link.EntryType == FileEntryType.File && filesId.Contains(r.Link.EntryId)
|| r.Link.EntryType == FileEntryType.Folder && foldersId.Any(f => r.Link.EntryId == f)); || r.Link.EntryType == FileEntryType.Folder && foldersId.Contains(r.Link.EntryId));
if (subject != Guid.Empty) if (subject != Guid.Empty)
{ {
@ -168,7 +168,7 @@ namespace ASC.Files.Core.Data
.Join(FilesDbContext.TagLink, r => r.Id, l => l.TagId, (tag, link) => new TagLinkData { Tag = tag, Link = link }) .Join(FilesDbContext.TagLink, r => r.Id, l => l.TagId, (tag, link) => new TagLinkData { Tag = tag, Link = link })
.Where(r => r.Link.TenantId == r.Tag.TenantId) .Where(r => r.Link.TenantId == r.Tag.TenantId)
.Where(r => r.Tag.Owner == Guid.Empty) .Where(r => r.Tag.Owner == Guid.Empty)
.Where(r => names.Any(n => r.Tag.Name == n)) .Where(r => names.Contains(r.Tag.Name))
.Where(r => r.Tag.Flag == tagType); .Where(r => r.Tag.Flag == tagType);
return FromQuery(q); return FromQuery(q);
@ -271,7 +271,7 @@ namespace ASC.Files.Core.Data
FilesDbContext.SaveChanges(); FilesDbContext.SaveChanges();
var tagsToRemove = Query(FilesDbContext.Tag) var tagsToRemove = Query(FilesDbContext.Tag)
.Where(r => !Query(FilesDbContext.TagLink).Where(a => a.TagId == r.Id).Any()); .Where(r => !Query(FilesDbContext.TagLink).Any(a => a.TagId == r.Id));
FilesDbContext.Tag.RemoveRange(tagsToRemove); FilesDbContext.Tag.RemoveRange(tagsToRemove);
FilesDbContext.SaveChanges(); FilesDbContext.SaveChanges();
@ -470,7 +470,7 @@ namespace ASC.Files.Core.Data
.Where(r => r.Tag.Flag == TagType.New) .Where(r => r.Tag.Flag == TagType.New)
.Where(x => x.Link.EntryId != null) .Where(x => x.Link.EntryId != null)
//.Where(r => tags.Any(t => t.TenantId == r.Link.TenantId && t.EntryId == r.Link.EntryId && t.EntryType == (int)r.Link.EntryType)); ; //.Where(r => tags.Any(t => t.TenantId == r.Link.TenantId && t.EntryId == r.Link.EntryId && t.EntryType == (int)r.Link.EntryType)); ;
.Where(r => entryIds.Any(t => t == r.Link.EntryId) && entryTypes.Contains((int)r.Link.EntryType)); .Where(r => entryIds.Contains(r.Link.EntryId) && entryTypes.Contains((int)r.Link.EntryType));
if (subject != Guid.Empty) if (subject != Guid.Empty)
{ {
@ -514,24 +514,18 @@ namespace ASC.Files.Core.Data
var shareQuery = var shareQuery =
new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where( new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where(
r => FilesDbContext.Security r => FilesDbContext.Security
.Where(a => a.TenantId == TenantID) .Any(a => a.TenantId == TenantID && a.EntryId == r.Link.EntryId && a.EntryType == r.Link.EntryType)));
.Where(a => a.EntryId == r.Link.EntryId)
.Where(a => a.EntryType == r.Link.EntryType)
.Any()));
var tmpShareFileTags = var tmpShareFileTags =
shareQuery() shareQuery()
.Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, file) => new { tagLink, file }) .Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, file) => new { tagLink, file })
.Where(r => r.file.TenantId == TenantID) .Where(r => r.file.TenantId == TenantID && r.file.CreateBy != subject && r.tagLink.Link.EntryType == FileEntryType.File)
.Where(r => r.file.CreateBy != subject)
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
.Select(r => new .Select(r => new
{ {
r.tagLink, r.tagLink,
root = FilesDbContext.Folders root = FilesDbContext.Folders
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree }) .Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == TenantID) .Where(x => x.folder.TenantId == TenantID && x.tree.FolderId == r.file.FolderId)
.Where(x => x.tree.FolderId == r.file.FolderId)
.OrderByDescending(r => r.tree.Level) .OrderByDescending(r => r.tree.Level)
.Select(r => r.folder) .Select(r => r.folder)
.Take(1) .Take(1)
@ -546,9 +540,7 @@ namespace ASC.Files.Core.Data
var tmpShareFolderTags = var tmpShareFolderTags =
shareQuery() shareQuery()
.Join(FilesDbContext.Folders, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, folder) => new { tagLink, folder }) .Join(FilesDbContext.Folders, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, folder) => new { tagLink, folder })
.Where(r => r.folder.TenantId == TenantID) .Where(r => r.folder.TenantId == TenantID && r.folder.CreateBy != subject && r.tagLink.Link.EntryType == FileEntryType.Folder)
.Where(r => r.folder.CreateBy != subject)
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder)
.Select(r => new .Select(r => new
{ {
r.tagLink, r.tagLink,
@ -571,15 +563,14 @@ namespace ASC.Files.Core.Data
.Join(FilesDbContext.ThirdpartyIdMapping, r => r.Link.EntryId, r => r.HashId, (tagLink, mapping) => new { tagLink, mapping }) .Join(FilesDbContext.ThirdpartyIdMapping, r => r.Link.EntryId, r => r.HashId, (tagLink, mapping) => new { tagLink, mapping })
.Where(r => r.mapping.TenantId == r.tagLink.Link.TenantId) .Where(r => r.mapping.TenantId == r.tagLink.Link.TenantId)
.Join(FilesDbContext.ThirdpartyAccount, r => r.mapping.TenantId, r => r.TenantId, (tagLinkMapping, account) => new { tagLinkMapping.tagLink, tagLinkMapping.mapping, account }) .Join(FilesDbContext.ThirdpartyAccount, r => r.mapping.TenantId, r => r.TenantId, (tagLinkMapping, account) => new { tagLinkMapping.tagLink, tagLinkMapping.mapping, account })
.Where(r => r.account.UserId != subject) .Where(r => r.account.UserId != subject &&
.Where(r => r.account.FolderType == FolderType.USER) r.account.FolderType == FolderType.USER &&
.Where(r => (r.mapping.Id.StartsWith("sbox-" + r.account.Id) ||
r.mapping.Id.StartsWith("sbox-" + r.account.Id) ||
r.mapping.Id.StartsWith("box-" + r.account.Id) || r.mapping.Id.StartsWith("box-" + r.account.Id) ||
r.mapping.Id.StartsWith("dropbox-" + r.account.Id) || r.mapping.Id.StartsWith("dropbox-" + r.account.Id) ||
r.mapping.Id.StartsWith("spoint-" + r.account.Id) || r.mapping.Id.StartsWith("spoint-" + r.account.Id) ||
r.mapping.Id.StartsWith("drive-" + r.account.Id) || r.mapping.Id.StartsWith("drive-" + r.account.Id) ||
r.mapping.Id.StartsWith("onedrive-" + r.account.Id) r.mapping.Id.StartsWith("onedrive-" + r.account.Id))
) )
.Select(r => r.tagLink); .Select(r => r.tagLink);
@ -590,24 +581,22 @@ namespace ASC.Files.Core.Data
var shareQuery = var shareQuery =
new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where( new Func<IQueryable<TagLinkData>>(() => getBaseSqlQuery().Where(
r => FilesDbContext.Security r => FilesDbContext.Security
.Where(a => a.TenantId == TenantID) .Any(a => a.TenantId == TenantID &&
.Where(a => a.EntryId == r.Link.EntryId) a.EntryId == r.Link.EntryId &&
.Where(a => a.EntryType == r.Link.EntryType) a.EntryType == r.Link.EntryType)));
.Any()));
var tmpShareFileTags = var tmpShareFileTags =
shareQuery() shareQuery()
.Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, file) => new { tagLink, file }) .Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, file) => new { tagLink, file })
.Where(r => r.file.TenantId == TenantID) .Where(r => r.file.TenantId == TenantID &&
.Where(r => r.file.CreateBy != subject) r.file.CreateBy != subject &&
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File) r.tagLink.Link.EntryType == FileEntryType.File)
.Select(r => new .Select(r => new
{ {
r.tagLink, r.tagLink,
root = FilesDbContext.Folders root = FilesDbContext.Folders
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree }) .Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == TenantID) .Where(x => x.folder.TenantId == TenantID && x.tree.FolderId == r.file.FolderId)
.Where(x => x.tree.FolderId == r.file.FolderId)
.OrderByDescending(r => r.tree.Level) .OrderByDescending(r => r.tree.Level)
.Select(r => r.folder) .Select(r => r.folder)
.Take(1) .Take(1)
@ -622,16 +611,15 @@ namespace ASC.Files.Core.Data
var tmpShareFolderTags = var tmpShareFolderTags =
shareQuery() shareQuery()
.Join(FilesDbContext.Folders, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, folder) => new { tagLink, folder }) .Join(FilesDbContext.Folders, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, folder) => new { tagLink, folder })
.Where(r => r.folder.TenantId == TenantID) .Where(r => r.folder.TenantId == TenantID
.Where(r => r.folder.CreateBy != subject) && r.folder.CreateBy != subject
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder) && r.tagLink.Link.EntryType == FileEntryType.Folder)
.Select(r => new .Select(r => new
{ {
r.tagLink, r.tagLink,
root = FilesDbContext.Folders root = FilesDbContext.Folders
.Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree }) .Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree })
.Where(x => x.folder.TenantId == TenantID) .Where(x => x.folder.TenantId == TenantID && x.tree.FolderId == r.folder.ParentId)
.Where(x => x.tree.FolderId == r.folder.ParentId)
.OrderByDescending(r => r.tree.Level) .OrderByDescending(r => r.tree.Level)
.Select(r => r.folder) .Select(r => r.folder)
.Take(1) .Take(1)
@ -646,9 +634,9 @@ namespace ASC.Files.Core.Data
{ {
var q = getBaseSqlQuery() var q = getBaseSqlQuery()
.Join(FilesDbContext.BunchObjects, r => r.Link.TenantId, r => r.TenantId, (tagLink, bunch) => new { tagLink, bunch }) .Join(FilesDbContext.BunchObjects, r => r.Link.TenantId, r => r.TenantId, (tagLink, bunch) => new { tagLink, bunch })
.Where(r => r.bunch.LeftNode == r.tagLink.Link.EntryId) .Where(r => r.bunch.LeftNode == r.tagLink.Link.EntryId &&
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder) r.tagLink.Link.EntryType == FileEntryType.Folder &&
.Where(r => r.bunch.RightNode.StartsWith("projects/project/")) r.bunch.RightNode.StartsWith("projects/project/"))
.Select(r => r.tagLink); .Select(r => r.tagLink);
tempTags = tempTags.Concat(FromQuery(q)); tempTags = tempTags.Concat(FromQuery(q));
} }
@ -664,7 +652,7 @@ namespace ASC.Files.Core.Data
var monitorFolderIdsInt = monitorFolderIds.Select(r => Convert.ToInt32(r)).ToList(); var monitorFolderIdsInt = monitorFolderIds.Select(r => Convert.ToInt32(r)).ToList();
var subFoldersSqlQuery = var subFoldersSqlQuery =
FilesDbContext.Tree FilesDbContext.Tree
.Where(r => monitorFolderIdsInt.Any(a => r.ParentId == a)); .Where(r => monitorFolderIdsInt.Contains(r.ParentId));
if (!deepSearch) if (!deepSearch)
{ {
@ -676,7 +664,7 @@ namespace ASC.Files.Core.Data
var monitorFolderIdsStrings = monitorFolderIds.Select(r => r.ToString()).ToList(); var monitorFolderIdsStrings = monitorFolderIds.Select(r => r.ToString()).ToList();
var newTagsForFolders = getBaseSqlQuery() var newTagsForFolders = getBaseSqlQuery()
.Where(r => monitorFolderIdsStrings.Any(a => r.Link.EntryId == a)) .Where(r => monitorFolderIdsStrings.Contains(r.Link.EntryId))
.Where(r => r.Link.EntryType == FileEntryType.Folder); .Where(r => r.Link.EntryType == FileEntryType.Folder);
result.AddRange(FromQuery(newTagsForFolders)); result.AddRange(FromQuery(newTagsForFolders));
@ -689,7 +677,7 @@ namespace ASC.Files.Core.Data
getBaseSqlQuery() getBaseSqlQuery()
.Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, r => r.Id, (tagLink, file) => new { tagLink, file }) .Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, r => r.Id, (tagLink, file) => new { tagLink, file })
.Where(r => r.file.TenantId == r.tagLink.Link.TenantId) .Where(r => r.file.TenantId == r.tagLink.Link.TenantId)
.Where(r => where.Any(a => r.file.FolderId.ToString() == a)) .Where(r => where.Contains(r.file.FolderId.ToString()))
.Where(r => r.tagLink.Link.EntryType == FileEntryType.File) .Where(r => r.tagLink.Link.EntryType == FileEntryType.File)
.Select(r => r.tagLink); .Select(r => r.tagLink);
@ -718,10 +706,10 @@ namespace ASC.Files.Core.Data
var newTagsForSBox = getBaseSqlQuery() var newTagsForSBox = getBaseSqlQuery()
.Join(FilesDbContext.ThirdpartyIdMapping, r => r.Link.EntryId, r => r.HashId, (tagLink, mapping) => new { tagLink, mapping }) .Join(FilesDbContext.ThirdpartyIdMapping, r => r.Link.EntryId, r => r.HashId, (tagLink, mapping) => new { tagLink, mapping })
.Where(r => r.mapping.TenantId == TenantID) .Where(r => r.mapping.TenantId == TenantID &&
.Where(r => thirdpartyFolderIds.Any(a => r.mapping.Id == a)) thirdpartyFolderIds.Contains(r.mapping.Id) &&
.Where(r => r.tagLink.Tag.Owner == subject) r.tagLink.Tag.Owner == subject &&
.Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder) r.tagLink.Link.EntryType == FileEntryType.Folder)
.Select(r => r.tagLink); .Select(r => r.tagLink);
result.AddRange(FromQuery(newTagsForSBox)); result.AddRange(FromQuery(newTagsForSBox));