从可用版本中获取下一个最高版本号



假设我有4个不同版本的

删除后,刷新到下一个最高可用案例版本

例如,如果我在此列表中删除版本1.1,我希望页面刷新到1.2。如果我删除1.3,我希望页面刷新到1.2。如果我删除1.0,我希望页面刷新到1.1

public decimal GetLatestValidCaseVersion()
{
return Versions
.Where(b => !b.IsDeleted)
.OrderByDescending(c => c.DisplayVersion)
.FirstOrDefault()
.DisplayVersion;
}

在DisplayVersion上,我将获得基于lastmodifiedtc的最新版本。。。。但我希望它基于上面的例子。。。。。提前感谢

如果我理解正确,您希望返回列表中DisplayVersion大于其中IsDeleted == true的项目中最大DisplayVersion的第一个项目的DisplayVersion,除非没有大于,在这种情况下,返回未删除项目中最大的,如果没有删除,则返回最小的DisplayVersion

public decimal GetLatestValidCaseVersion()
{
// Order the items by DisplayVersion
var ordered = Versions.OrderBy(v => v.DisplayVersion).ToList();
// Get all the non-deleted items (in order)
var nonDeleted = ordered.Where(v => v.IsDeleted == false).ToList();
// Find the item with the greatest DisplayVersion of all deleted items
var highestDeletedVersion = ordered
.Except(nonDeleted)
.LastOrDefault();
// If there are no deleted items, return the first DisplayVersion
if (highestDeletedVersion == null)
return ordered.First().DisplayVersion;
// Otherwise, return the first non-deleted item whose DisplayVersion 
// is greater than the greatest deleted item, and if none exist 
// then return the last non-deleted item's DisplayVersion
return (nonDeleted
.FirstOrDefault(v => v.DisplayVersion > highestDeletedVersion.DisplayVersion)
?? nonDeleted.Last())
.DisplayVersion;
}

或者,一种迭代的方法(这将更有效(可能看起来像:

public decimal GetLatestValidCaseVersion()
{
var ordered = Versions.OrderBy(v => v.DisplayVersion).ToList();
Version latestValidCaseVersion = null;
for (int i = 0; i < ordered.Count; i++)
{
var prevVersion = i > 0 ? ordered[i - 1] : null;
var thisVersion = ordered[i];
var nextVersion = i < ordered.Count - 1 ? ordered[i + 1] : null;
if (thisVersion.IsDeleted)
{
if (nextVersion != null && !nextVersion.IsDeleted)
{
latestValidCaseVersion = nextVersion;
}
else if (prevVersion != null && !prevVersion.IsDeleted)
{
latestValidCaseVersion = prevVersion;
}
}
else if (latestValidCaseVersion == null)
{
latestValidCaseVersion = thisVersion;
}
}
return latestValidCaseVersion.DisplayVersion;
}

最新更新