如何使用Dynamic Linq选取IGrouping中的所有分组项?
解决Dynamic LINQ中获取IGrouping所有元素的问题
你当前查询仅返回分组首个元素,原因是在selectGrouping中使用it.First()生成Value,这只会提取分组中的第一个元素,而非整个分组的集合。IGrouping本身继承了IEnumerable<T>,代表整个分组的元素序列,只需直接引用这个序列就能获取所有项。
修改方案
调整selectGrouping的定义,将Value部分从取单个元素改为引用整个分组的元素集合:
var selectGrouping = "new (it.Key as Key , it.Select(it.CentroId).Distinct().Count() as CantidadCentros , it.Select(it.OfertaFomativaId).Distinct().Count() as Acciones , it.ToList() as Value)"
说明
it代表当前的IGrouping实例,it.ToList()会将分组内所有元素转换为列表赋值给Value,以此获取分组全部数据。- 若无需立即转为List,也可直接写
it as Value,后续仍能遍历这个IEnumerable序列。
如果需要对分组内元素做进一步字段筛选(仅保留指定字段),可在it后添加动态Select:
var selectGrouping = "new (it.Key as Key , it.Select(it.CentroId).Distinct().Count() as CantidadCentros , it.Select(it.OfertaFomativaId).Distinct().Count() as Acciones , it.Select(new (AccionFormativaId, EstadoId, OfertaFormativaNombre, AmbitoNombre, CantidadAcciones, CentroId)).ToList() as Value)"
修改后的完整查询代码保持不变:
var re = queryable .Select(select) .GroupBy(fields, "it") .Select(selectGrouping) .ToDynamicList();
内容的提问来源于stack exchange,提问作者PontiacGTX
相关产品推荐
相关产品推荐

