我創建了租戶
這是代碼
var tenant = new Tenant(tenancyName, name)
{
IsActive = isActive,
EditionId = editionId,
SubscriptionEndDateUtc = subscriptionEndDate?.ToUniversalTime(),
IsInTrialPeriod = isInTrialPeriod,
ConnectionString = connectionString.IsNullOrWhiteSpace()
? null
: SimpleStringCipher.Instance.Encrypt(connectionString)
};
await CreateAsync(tenant);
await _unitOfWorkManager.Current.SaveChangesAsync(); //To get new tenant's id.
tenancyName 可以復制
所以為了檢查它我使用這個條件
if (await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenant.TenancyName) != null)
{
}
我需要為它添加一個計數以使其唯一。
因此,例如,如果EugeneTenant重復,我需要添加 2 到它,是 EugeneTenant2,
如果 EugeneTenant2 重復,則加 3,所以 EugeneTenant3
所以它會從 2 自動遞增,直到條件滿足。
我添加了這個代碼
int startNumber = 2;
do
{
tenant.TenancyName = $"{tenant.TenancyName}{startNumber}";
tenant.Name = $"{tenant.TenancyName}{startNumber}";
startNumber ;
}
while (await TenantRepository.FirstOrDefaultAsync(t => t.TenancyName == tenant.TenancyName) != null);
但例如,如果我有EugeneTenancy2,下一個我有,EugeneTenancy23
我怎么能做到這一點?
uj5u.com熱心網友回復:
如果您在名稱和計數器之間使用分隔符(如EugeneTenancy-2),那么您可以擺脫startNumber計數器。
const string Delimiter = "-";
var tenancyName = tenant.TenancyName;
string[] parts = tenancyName.Split(Delimiter);
if(parts.Length == 1)
{
tenancyName = $"{tenancyName}{Delimiter}2";
}
else
{
int counter = int.Parse(parts[1]);
tenancyName = $"{tenancyName}{Delimiter}{ counter}";
}
tenant.TenancyName = tenancyName;
tenant.Name = tenancyName;
顯然,這段代碼非常脆弱(.Length == 1、parts[1]、int.Parse等),但您知道如何依賴資料,該資料已在TenancyName.
換句話說,這不是一個健壯的代碼,它僅為演示目的而創建。
更新 #1:如果不允許使用分隔符
然后你需要TrimStart改用
char[] prefix = originalTenancyName.ToCharArray(); //store outside of the loop
string counterRaw = tenancyName.TrimStart(prefix);
int counter = int.Parse(counterRaw);
uj5u.com熱心網友回復:
var name = "EugeneTenant";
var names = TenantRepository
.Where(t => t.TenancyName.Contains(tenant.TenancyName))
.OrderByDescending(t => t.TenancyName)
.Select(x => x.TenancyName);
if (names.Any())
{
var latest = $"{names.First()}";
var cnt = $"{Regex.Match(latest, @"\d*$")?.Value}";
if (int.TryParse(cnt, out int n))
{
name = latest.Replace(cnt, $"{n 1}");
}
else
{
name = 2;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/403437.html
標籤:
