基于Lambda查询实现按性别分组并排序重型汽车名称
实现按性别分组筛选并排序重型汽车的方案
我来帮你调整Lambda查询代码,实现按性别分组、筛选重型汽车并对名称排序的需求。你的现有代码缺少分组逻辑,我们来补充完善:
修正后的完整代码
var result = m.Where(b => b.Cars != null && b.Cars.Any(t => t.Type.Contains("Heavy"))) .GroupBy(owner => owner.Gender) .Select(group => new Result { Gender = group.Key, Name = group.SelectMany(owner => owner.Cars.Where(car => car.Type.Contains("Heavy")) .Select(car => car.Name)) .OrderBy(carName => carName) .ToList() });
代码分步解释
- 过滤有效记录:先用
Where筛选出拥有汽车且至少有一辆是"Heavy"类型的车主,这样可以避免处理空汽车列表或者没有符合条件车辆的无效数据。 - 按性别分组:通过
GroupBy方法将车主按Gender字段分组,同一性别的车主会被归为一组,方便后续统一处理。 - 提取并排序汽车名称:
- 使用
SelectMany将同一分组下所有车主的符合条件的汽车名称扁平化为一个集合(避免出现嵌套列表); - 调用
OrderBy对汽车名称按字母顺序进行升序排序; - 最后将排序后的结果转为
List<string>,赋值给Result对象的Name属性。
- 使用
预期输出效果
按照你给出的示例数据,最终得到的result集合会包含两个Result对象:
Gender: "Male",Name: ["Ambassador", "Lamborghini", "Maruti"]Gender: "Female",Name: ["Bugatti", "Maruti", "Scooty"]
内容的提问来源于stack exchange,提问作者somnath roy
相关产品推荐
相关产品推荐

