有没有一种快速的方法(使用 Linq)通过 c# 中每个版本号的顶部过滤列表?

Is there a quick way (using Linq) to filter the list by the top of each version number in c#?

我有一个 IEnumerable 对象,它的属性之一是版本详细信息。它包含像

这样的值
1.0,1.1,2.0,2.1,2.2,3.0

我想获得每个版本的最大值

1.1,2.2,3.0

我可以使用循环来完成。但是是否有 quicker/cleaner 方法可以使用 Linq 做同样的事情? 以下是 class 详细信息:

 public class FileVersionDetail
    {

        public int? ReturnTypeId { get; set; }
        public string FileTemplateName { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime? EndDate { get; set; }
        public DateTime? EffectiveDate { get; set; }
        public string VersionNumber { get; set; }
    }

将 Rotem 的评论作为代码。

private IEnumerable<string> GetMaxVersions(IEnumerable<FileVersionDetail> files) 
{
        //1. Group the list by base/floor version numbers.
        var groupedByBaseVersion = files.Select(f => f.VersionNumber).GroupBy(f => f.Split('.')[0]);

        //2. Find the max in each group.
        return groupedByBaseVersion.Select(g => g.ToArray().Max());
}

我会为此目的使用 System.Version class,因为它已经有一个很好的版本字符串解析器,并且预先构建了比较逻辑。

private IEnumerable<string> GetMaxVersions(IEnumerable<FileVersionDetail> files) 
{
    return files
      .Select(f=>new Version(f.VersionNumber))
      .GroupBy(f=>f.Major)
      .Select(f=>f.Max().ToString());
}