有没有一种快速的方法(使用 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());
}
我有一个 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());
}