【发布时间】:2017-12-15 16:09:01
【问题描述】:
我正在做一个简单的 GroupBy 获取第一个元素,但我想修改每个结果的一个属性。
class M
{
public string Name {get; set;}
public int NOfPeopleWithTheSameName {get; set;}
public string P1 {get; set;}
public string P2 {get; set;}
public string P3 {get; set;}
public string P4 {get; set;}
public string P5 {get; set;}
}
List<M> myList = GetMyList();
var l2 = myList
.GroupBy(m => m.Name)
.Select(group => new M { Name = group.Key, NOfPeopleWithTheSameName = group.Count() });
这很简单,但如果类有很多属性(因为每个属性值都应该复制到新的属性值),这种方法不是最好的吗?我应该一个一个地复制它们。
我想简单地获取元素并更改属性 NOfPeopleWithTheSameName
【问题讨论】:
-
这取决于您是否想要新的
M对象,或者您是否可以改变现有的对象。 -
你是说
myList是M类型的列表吗? -
是的,myList 的类型是 M
-
另一种选择是在
M上创建一个构造函数,它接受一个M对象并为您进行复制,然后您只需更新一个属性。或者查看像 Automapper 这样的映射库。 -
问题是你的类存储了更多的东西。它不应该知道不属于此类的任何其他集合中有多少重复项。
NOfPeopleWithTheSameName不属于此类。删除它,你也解决了你的问题,因为你不需要创建它的新实例。