我有一个应用程序,有助于管理学习者做资格。我们最近升级了我们的系统,以模拟教室。我需要写一段代码,将学习者按教室分组,其中包括他们注册的中心,他们正在做的资格和他们正在完成的单元。我尝试了下面的代码示例:
var midFlightLearners = _learnerRepository.GetAllMidFlightLearners();
var groupedMidFlightLearners = midFlightLearners.GroupBy(l => new
{
l.DeliveryCentreId,
l.QualificationId,
l.LearnerUnits.Select(lu => lru.Unit).ToList()
});
然而,这并不像预期的那样工作。在创建教室时,学习者需要按他们正在学习的单元进行分组。有什么办法可以做到吗?
2条答案
按热度按时间6ss1mwsb1#
.NET BCL默认情况下不提供列表的自定义比较器(即默认使用一个-通过引用,
ToList()
将产生一个新的列表示例,所以所有的键都是不同的,因此你将有一个元素的组)。你需要使用一些自定义的key类型来实现Equals+GetHashcode
或者将IEqualityComparer
传递给GroupBy
调用。或者,您可以尝试将单位列表转换为字符串:
hfwmuf9z2#
无论如何不能在查询过程中使用
ToList
,因为这需要将所有数据带回客户端。您可以使用字符串聚合来获取包含所有单位的单个值。
这不是100%可靠的,因为排序可能因行而异。您可以添加
.Order()
,但我不确定EF Core是否可以正确地将其转换为WITHIN GROUP (ORDER BY
。