如何使用LINQ查询获取表中每条记录的最新版本并存入列表
解决方案
核心逻辑为按名称分组后,将版本字符串转为System.Version类型比较大小,取每个分组内版本最高的条目即可,避免字符串直接比较出现的逻辑错误。
完整代码示例
// 你的原有查询 var packages = _readOnlyContext.Names.AsEnumerable().Select(x => new Names { Name = x.Name, Version = x.Version.ToString() }); // 新增分组取最新版本逻辑 var latestVersionList = packages .GroupBy(pkg => pkg.Name) .Select(group => group .OrderByDescending(pkg => Version.Parse(pkg.Version)) .First() ) .ToList();
说明
- 如果存在不符合版本号规范的异常数据,可以将
Version.Parse替换为Version.TryParse做容错处理,避免运行时抛出异常。 - 如果你使用的是EF Core且数据量较大,可以尝试去掉
AsEnumerable()将逻辑下推到数据库执行,需确认你使用的EF Core版本支持Version.Parse的SQL翻译,不支持的话保留原有内存处理逻辑即可。
内容的提问来源于stack exchange,提问作者tesla_coil
相关产品推荐
相关产品推荐

