如何按姓名分组为列表对象的ValueToCalculate属性赋值
实现方案
可以通过分组查找+批量赋值的方式完成需求,以下是具体实现:
.NET 6+ 版本(支持MinBy)
var myObjects = new List<MyObject>(); // 你的集合实例 // 按FirstName和LastName分组,处理每组数据 foreach (var group in myObjects.GroupBy(obj => new { obj.FirstName, obj.LastName })) { // 找到组内DateTime最小的对象的Value值 var targetValue = group.MinBy(item => item.DateTime).Value; // 给组内所有对象的ValueToCalculate赋值 foreach (var obj in group) { obj.ValueToCalculate = targetValue; } }
.NET 5及以下版本(无MinBy时的替代写法)
如果你的项目不支持MinBy,可以用OrderBy配合First来替代:
var myObjects = new List<MyObject>(); // 你的集合实例 foreach (var group in myObjects.GroupBy(obj => new { obj.FirstName, obj.LastName })) { // 先按DateTime升序排序,取第一个元素的Value var targetValue = group.OrderBy(item => item.DateTime).First().Value; foreach (var obj in group) { obj.ValueToCalculate = targetValue; } }
关键说明
- 分组键用匿名类型
new { obj.FirstName, obj.LastName },确保同时匹配FirstName和LastName的对象被分到同一组。 - 遍历分组时直接修改原对象的
ValueToCalculate属性,因为MyObject是引用类型,修改会直接作用于原集合中的实例。
内容的提问来源于stack exchange,提问作者Stix
相关产品推荐
相关产品推荐

