c# - 按三个不同的版本部分分组和排序
问题描述
我有以下数据:
名称 - 市长版本 - 次要版本 - 构建版本
X - 1 - 0 - 0
X - 1 - 1 - 0
X - 2 - 0 - 0
Y - 0 - 2 - 3
Y - 0 - 1 - 1
Z - 4 - 4 - 4
现在我想用 Mayor > Minor > Build 按名称分组来获得最高版本号。
所以这里的输出应该是:
X - 2 - 0 - 0
Y - 0 - 2 - 3
Z - 4 - 4 - 4
如何在linq中做到这一点?我尝试按名称分组,然后按市长排序,然后按次要排序,然后按构建并获取 first(),但我无法弄清楚这里的语法......
解决方案
您可以在after 语句中使用OrderByDescending
followed with 链式ThenByDescending
调用:Select
GroupBy
class Version
{
public string Name {get;set;}
public int MajorVersion {get;set;}
public int MinorVersion {get;set;}
public int BuildVersion {get;set;}
}
List<Version> versions = ...;
versions
.GroupBy(x => x.Name)
.Select(g => g.OrderByDescending(g => g.MajorVersion)
.ThenByDescending(g => g.MinorVersion)
.ThenByDescending(g => g.BuildVersion)
.First())
.ToList();
或者尝试利用默认值元组比较器:
versions
.GroupBy(x => x.Name)
.Select(g => g.OrderByDescending(g => (g.MajorVersion, g.MinorVersion, g.BuildVersion))
.First())
.ToList();
推荐阅读
- android - 如何在 ViewModel 中使用 Strings.xml 而无需在 Android 中使用上下文?
- java - Spring WebClient 下载 PDF 会出现 HTTP 错误
- sql - SQL - 记录案例记录中的状态变化
- javascript - if(id != null) 与 if(!id) 之间的 Javascript 区别
- android - 如何更改kotlin中按钮的背景颜色
- c - (type *)var 和 (type *)&var 的区别
- c# - 如何将 SQLite 数据库“连接”到 gridview?
- python - Python 使用 Jar 文件
- java - 如何获取给定列表中的联系人
- swift - Swift 方法链,如何重用类和方法?