为什么我的 GroupBy -> SelectMany 例行公事
本文关键字:SelectMany 例行公事 我的 GroupBy 为什么 | 更新日期: 2023-09-27 18:35:08
我在 6+ 个月前自己写了这个,现在我不记得它为什么有效......
我有以下一段代码:
var grouped = alleSkjema.GroupBy(q => q.OrgID);
var newGroupList = grouped.Where(q => q.Count() < 4).SelectMany(p => p).ToList();
newGroupList.ForEach(p => p.OrgID = u.tre.First().orgid);
其中alleSkjema
是具有某些属性的IEnumerable<T>
。 OrgID
是各种部门 ID,此上下文中的T
是人员。
我在上面的代码中所做的是将属于少于 4 人的部门的每个人分组到他们自己的组中。这是出于匿名原因,对解决方案并不重要。
接下来发生的事情是,只有上面的三行,alleSkjema
被修改了,我不知道为什么。我想可变性正在咬我的屁股?我想我需要做我在alleSkjema
集合的最后一行正在做的事情,以获得预期的结果。newGroupList
是否以某种方式包含对alleSkjema
集合的引用?
罪魁祸首在这里:p.OrgID = u.tre.First().orgid
您不是在"复制"对象,因此alleSkjema
中包含的项目是newGroupList
中硬币的超集。需要明确的是,如果X
包含在alleSkjema
中并且X
通过了测试,那么X
就被放在newGroupList
中。同样的X
,不是X
的副本。这是因为您的对象是引用类型。
您的alleSkjema
变量根本没有被修改。但是,它似乎包含引用,并且这些引用指向的实例由最后一行修改。