Browse Source

Refactor LINQ queries to use AsEnumerable() for better compatibility with MongoDb Driver.

https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/10.0/csharp-overload-resolution#recommended-action
pull/23609/head
maliming 1 year ago
parent
commit
5c815136a5
  1. 2
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs
  2. 29
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs
  3. 14
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs
  4. 4
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs
  5. 2
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs
  6. 2
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs
  7. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Scopes/MongoOpenIddictScopeRepository.cs
  8. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs
  9. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs
  10. 2
      modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs

2
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoTagRepository.cs

@ -91,7 +91,7 @@ public class MongoTagRepository : MongoDbRepository<ICmsKitMongoDbContext, Volo.
.Select(x => new { x.Id, x.Name })
.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken));
var tagIds = tags.Select(x => x.Id);
var tagIds = tags.Select(x => x.Id).ToList();
var entityTagCounts = await (await GetQueryableAsync<EntityTag>(cancellationToken))
.Where(q => tagIds.Contains(q.TagId))

29
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs

@ -42,14 +42,14 @@ public class MongoIdentityUserRepository : MongoDbRepository<IAbpIdentityMongoDb
var user = await GetAsync(id, cancellationToken: cancellationToken);
var organizationUnitIds = user.OrganizationUnits
.Select(r => r.OrganizationUnitId)
.ToArray();
.ToList();
var organizationUnits = await (await GetQueryableAsync<OrganizationUnit>(cancellationToken))
.Where(ou => organizationUnitIds.Contains(ou.Id))
.ToListAsync(cancellationToken: cancellationToken);
var orgUnitRoleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray();
var roleIds = user.Roles.Select(r => r.RoleId).ToArray();
var allRoleIds = orgUnitRoleIds.Union(roleIds);
var orgUnitRoleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToList();
var roleIds = user.Roles.Select(r => r.RoleId).ToList();
var allRoleIds = orgUnitRoleIds.Union(roleIds).ToList();
return await (await GetQueryableAsync<IdentityRole>(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(cancellationToken);
}
@ -62,13 +62,13 @@ public class MongoIdentityUserRepository : MongoDbRepository<IAbpIdentityMongoDb
var organizationUnitIds = user.OrganizationUnits
.Select(r => r.OrganizationUnitId)
.ToArray();
.ToList();
var organizationUnits = await (await GetQueryableAsync<OrganizationUnit>(cancellationToken))
.Where(ou => organizationUnitIds.Contains(ou.Id))
.ToListAsync(cancellationToken: cancellationToken);
var roleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray();
var roleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToList();
var queryable = await GetQueryableAsync<IdentityRole>(cancellationToken);
@ -217,13 +217,13 @@ public class MongoIdentityUserRepository : MongoDbRepository<IAbpIdentityMongoDb
var user = await GetAsync(id, cancellationToken: cancellationToken);
var organizationUnitIds = user.OrganizationUnits
.Select(r => r.OrganizationUnitId)
.ToArray();
.ToList();
var organizationUnits = await (await GetQueryableAsync<OrganizationUnit>(cancellationToken))
.Where(ou => organizationUnitIds.Contains(ou.Id))
.ToListAsync(cancellationToken: cancellationToken);
var orgUnitRoleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray();
var roleIds = user.Roles.Select(r => r.RoleId).ToArray();
var orgUnitRoleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToList();
var roleIds = user.Roles.Select(r => r.RoleId).ToList();
var allRoleIds = orgUnitRoleIds.Union(roleIds);
return await (await GetQueryableAsync<IdentityRole>(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).ToListAsync(cancellationToken);
}
@ -235,7 +235,7 @@ public class MongoIdentityUserRepository : MongoDbRepository<IAbpIdentityMongoDb
{
cancellationToken = GetCancellationToken(cancellationToken);
var user = await GetAsync(id, cancellationToken: cancellationToken);
var organizationUnitIds = user.OrganizationUnits.Select(r => r.OrganizationUnitId);
var organizationUnitIds = user.OrganizationUnits.Select(r => r.OrganizationUnitId).ToList();
return await (await GetQueryableAsync<OrganizationUnit>(cancellationToken))
.Where(ou => organizationUnitIds.Contains(ou.Id))
@ -408,8 +408,8 @@ public class MongoIdentityUserRepository : MongoDbRepository<IAbpIdentityMongoDb
.Select(userOrganizationUnit => new { userOrganizationUnit.UserId, userOrganizationUnit.OrganizationUnitId })
.GroupBy(x => x.UserId).ToDictionary(x => x.Key, x => x.Select(r => r.OrganizationUnitId).ToList());
var organizationUnitIds = userAndOrganizationUnitIds.SelectMany(x => x.Value);
var roleIds = userAndRoleIds.SelectMany(x => x.Value);
var organizationUnitIds = userAndOrganizationUnitIds.SelectMany(x => x.Value).ToList();
var roleIds = userAndRoleIds.SelectMany(x => x.Value).ToList();
var organizationUnitAndRoleIds = await (await GetQueryableAsync<OrganizationUnit>(cancellationToken)).Where(ou => organizationUnitIds.Contains(ou.Id))
.Select(userOrganizationUnit => new
@ -418,8 +418,7 @@ public class MongoIdentityUserRepository : MongoDbRepository<IAbpIdentityMongoDb
userOrganizationUnit.Roles
}).ToListAsync(cancellationToken: cancellationToken);
var allOrganizationUnitRoleIds = organizationUnitAndRoleIds.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToList();
var allRoleIds = roleIds.Union(allOrganizationUnitRoleIds);
var allRoleIds = roleIds.Union(allOrganizationUnitRoleIds).ToList();
var roles = await (await GetQueryableAsync<IdentityRole>(cancellationToken)).Where(r => allRoleIds.Contains(r.Id)).Select(r => new{ r.Id, r.Name }).ToListAsync(cancellationToken);
var userRoles = userAndRoleIds.ToDictionary(x => x.Key, x => roles.Where(r => x.Value.Contains(r.Id)).Select(r => r.Name).ToArray());
@ -477,7 +476,7 @@ public class MongoIdentityUserRepository : MongoDbRepository<IAbpIdentityMongoDb
var organizationUnitIds = (await GetQueryableAsync<OrganizationUnit>(cancellationToken))
.Where(ou => ou.Roles.Any(r => r.RoleId == roleId.Value))
.Select(userOrganizationUnit => userOrganizationUnit.Id)
.ToArray();
.ToList();
query = query.Where(identityUser => identityUser.Roles.Any(x => x.RoleId == roleId.Value) || identityUser.OrganizationUnits.Any(x => organizationUnitIds.Contains(x.OrganizationUnitId)));
}

14
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs

@ -69,7 +69,7 @@ public class MongoOrganizationUnitRepository
CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(cancellationToken))
.Where(x => displayNames.Contains(x.DisplayName))
.Where(x => displayNames.AsEnumerable().Contains(x.DisplayName))
.ToListAsync(GetCancellationToken(cancellationToken));
}
@ -107,7 +107,7 @@ public class MongoOrganizationUnitRepository
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList();
return await (await GetQueryableAsync<IdentityRole>(cancellationToken))
.Where(r => roleIds.Contains(r.Id))
@ -125,10 +125,10 @@ public class MongoOrganizationUnitRepository
CancellationToken cancellationToken = default)
{
var organizationUnits = await (await GetQueryableAsync(cancellationToken))
.Where(ou => organizationUnitIds.Contains(ou.Id))
.Where(ou => organizationUnitIds.AsEnumerable().Contains(ou.Id))
.ToListAsync(GetCancellationToken(cancellationToken));
var roleIds = organizationUnits.SelectMany(ou => ou.Roles.Select(r => r.RoleId)).ToArray();
var roleIds = organizationUnits.SelectMany(ou => ou.Roles.Select(r => r.RoleId)).ToList();
return await (await GetQueryableAsync<IdentityRole>(cancellationToken))
.Where(r => roleIds.Contains(r.Id))
@ -141,7 +141,7 @@ public class MongoOrganizationUnitRepository
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default)
{
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList();
return await (await GetQueryableAsync<IdentityRole>(cancellationToken)).Where(r => roleIds.Contains(r.Id)).CountAsync(GetCancellationToken(cancellationToken));
}
@ -155,7 +155,7 @@ public class MongoOrganizationUnitRepository
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList();
return await (await GetQueryableAsync<IdentityRole>(cancellationToken))
.Where(r => !roleIds.Contains(r.Id))
@ -170,7 +170,7 @@ public class MongoOrganizationUnitRepository
string filter = null,
CancellationToken cancellationToken = default)
{
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList();
return await (await GetQueryableAsync<IdentityRole>(cancellationToken))
.Where(r => !roleIds.Contains(r.Id))

4
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs

@ -29,7 +29,7 @@ public class MongoApiResourceRepository : MongoDbRepository<IAbpIdentityServerMo
CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(cancellationToken))
.Where(ar => apiResourceNames.Contains(ar.Name))
.Where(ar => apiResourceNames.AsEnumerable().Contains(ar.Name))
.ToListAsync(GetCancellationToken(cancellationToken));
}
@ -37,7 +37,7 @@ public class MongoApiResourceRepository : MongoDbRepository<IAbpIdentityServerMo
CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(cancellationToken))
.Where(ar => ar.Scopes.Any(x => scopeNames.Contains(x.Scope)))
.Where(ar => ar.Scopes.Any(x => scopeNames.AsEnumerable().Contains(x.Scope)))
.ToListAsync(GetCancellationToken(cancellationToken));
}

2
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiScopeRepository.cs

@ -31,7 +31,7 @@ public class MongoApiScopeRepository : MongoDbRepository<IAbpIdentityServerMongo
CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(cancellationToken))
.Where(scope => scopeNames.Contains(scope.Name))
.Where(scope => scopeNames.AsEnumerable().Contains(scope.Name))
.OrderBy(scope => scope.Id)
.ToListAsync(GetCancellationToken(cancellationToken));
}

2
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs

@ -54,7 +54,7 @@ public class MongoIdentityResourceRepository : MongoDbRepository<IAbpIdentitySer
CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(cancellationToken))
.Where(ar => scopeNames.Contains(ar.Name))
.Where(ar => scopeNames.AsEnumerable().Contains(ar.Name))
.ToListAsync(GetCancellationToken(cancellationToken));
}

2
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Scopes/MongoOpenIddictScopeRepository.cs

@ -54,7 +54,7 @@ public class MongoOpenIddictScopeRepository : MongoDbRepository<OpenIddictMongoD
public virtual async Task<List<OpenIddictScope>> FindByNamesAsync(string[] names, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(GetCancellationToken(cancellationToken)))
.Where(x => names.Contains(x.Name))
.Where(x => names.AsEnumerable().Contains(x.Name))
.ToListAsync(GetCancellationToken(cancellationToken));
}

2
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs

@ -41,7 +41,7 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository<OpenIddictMongoD
public virtual async Task DeleteManyByAuthorizationIdsAsync(Guid[] authorizationIds, bool autoSave = false, CancellationToken cancellationToken = default)
{
var tokens = await (await GetQueryableAsync(GetCancellationToken(cancellationToken)))
.Where(x => x.AuthorizationId != null && authorizationIds.Contains(x.AuthorizationId.Value))
.Where(x => x.AuthorizationId != null && authorizationIds.AsEnumerable().Contains(x.AuthorizationId.Value))
.ToListAsync(GetCancellationToken(cancellationToken));
await DeleteManyAsync(tokens, autoSave, GetCancellationToken(cancellationToken));

2
modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs

@ -55,7 +55,7 @@ public class MongoPermissionGrantRepository :
cancellationToken = GetCancellationToken(cancellationToken);
return await (await GetQueryableAsync(cancellationToken))
.Where(s =>
names.Contains(s.Name) &&
names.AsEnumerable().Contains(s.Name) &&
s.ProviderName == providerName &&
s.ProviderKey == providerKey
).ToListAsync(cancellationToken);

2
modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs

@ -48,7 +48,7 @@ public class MongoSettingRepository : MongoDbRepository<ISettingManagementMongoD
CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync(cancellationToken))
.Where(s => names.Contains(s.Name) && s.ProviderName == providerName && s.ProviderKey == providerKey)
.Where(s => names.AsEnumerable().Contains(s.Name) && s.ProviderName == providerName && s.ProviderKey == providerKey)
.ToListAsync(GetCancellationToken(cancellationToken));
}
}

Loading…
Cancel
Save