如何按特定属性最小值分组获取Model1与Model2的关联关系?
嘿,我来帮你搞定这个按Model1分组后取每组最小Position关联的问题!
解决方案思路与实现
核心逻辑其实很简单,就是先按Model1Id分组,再从每个分组里挑出Position最小的实例,不管这个最小Position是1还是其他数值,完全适配你说的“Position 1被删除后自动取当前最小项”的场景。
以C# LINQ为例的具体实现
假设你已经拿到了所有关联实例的列表:
// 先获取所有关联关系 List<Model1ToModel2> allAssociations = GetAllModel1ToModel2Associations();
接下来用LINQ完成分组和筛选:
var targetAssociations = allAssociations // 第一步:按Model1Id把关联实例分成不同的组 .GroupBy(assoc => assoc.Model1Id) // 第二步:对每个组做处理 .Select(group => // 组内按Position升序排序,取第一个就是Position最小的实例 group.OrderBy(assoc => assoc.Position).FirstOrDefault() ) // 过滤掉可能为空的分组(如果某个Model1没有任何关联的话) .Where(item => item != null) .ToList();
额外补充说明
- 如果你的
Position是可空类型,记得在排序时处理空值,比如把空值排到最后:group.OrderBy(assoc => assoc.Position ?? int.MaxValue).FirstOrDefault() - 要是用Java的话,思路完全一致,用流式API实现:
List<Model1ToModel2> targetAssociations = allAssociations.stream() .collect(Collectors.groupingBy(Model1ToModel2::getModel1Id)) .values() .stream() .map(group -> group.stream() .min(Comparator.comparingInt(Model1ToModel2::getPosition)) .orElse(null) ) .filter(Objects::nonNull) .collect(Collectors.toList());
这样处理后,就能得到每个Model1对应的最小Position关联实例,完全匹配你的需求啦!
内容的提问来源于stack exchange,提问作者codlix
相关产品推荐
相关产品推荐

