【问题标题】:Get the NextHighest Version number out of Availble Version从可用版本中获取下一个最高版本号
【发布时间】:2020-08-05 15:59:37
【问题描述】:

假设我有 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 上,我会根据 lastmodifiedutc 获取最新版本....但我希望它基于上面的示例..... 提前致谢

【问题讨论】:

  • 该代码返回最高的未删除版本,但不会将其与任何“当前”版本进行比较。你怎么知道当前版本是什么?
  • 我什至不知道....如何为此编写逻辑....我是一个新人...

标签: c# .net entity-framework asp.net-web-api


【解决方案1】:

如果我理解正确,您想返回列表中第一个项目的DisplayVersion,其DisplayVersion 大于IsDeleted == true 所在项目的最大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;
}

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2015-10-26
    • 2018-05-02
    • 1970-01-01
    相关资源
    最近更新 更多