为什么我的 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集合的引用?

为什么我的 GroupBy -> SelectMany 例行公事

罪魁祸首在这里:p.OrgID = u.tre.First().orgid

您不是在"复制"对象,因此alleSkjema中包含的项目是newGroupList中硬币的超集。需要明确的是,如果X包含在alleSkjema中并且X通过了测试,那么X就被放在newGroupList中。同样的X,不是X的副本。这是因为您的对象是引用类型。

您的alleSkjema变量根本没有被修改。但是,它似乎包含引用,并且这些引用指向的实例最后一行修改。