c# - LINQ,按属性分组,同时保持其他属性排序
问题描述
所以我不完全确定如何解释我在这里想要做什么。我正在尝试获取一些数据(由下面的 Excel 文件屏幕截图表示),并且基本上按 Connection2 排序,同时将 Connection1 中的类似项目保持在一起。(在下面的屏幕截图中解释了一下)
这是我现在所拥有的:
var wires = RedConductorWires
.OrderBy(x => x.Label)
.ThenBy(x => x.Connection1)
.ThenBy(x => x.Connection2)
.ToList();
正在排序的类对象(匹配 Excel 屏幕截图):
public class CustomExcelFormat
{
public string Label { get; set; }
public string WireSize { get; set; }
public string WireColor { get; set; }
public string WirePartNumber { get; set; }
public string Length { get; set; }
public string Connection1 { get; set; }
public string Connection1Torque { get; set; }
public string Connection1Termination { get; set; }
public string Connection1StripLength { get; set; }
public string Checkbox1 { get; set; }
public string Connection2 { get; set; }
public string Connection2Torque { get; set; }
public string Connection2Termination { get; set; }
public string Connection2StripLength { get; set; }
public string Checkbox2 { get; set; }
}
问题:
问题是,如果您查看屏幕截图,棕色的“A1:TB7:M1”单元格也需要组合在一起,而绿色的“K7:10”需要组合在一起,同时保持它们的 Connection2 排序/组。
换句话说,连接 2 侧,K8:10 和 K8:11 需要保持组合在一起。
所以很明显我的 LINQ 查询不正确,我相信我需要进行某种分组然后排序,但我不确定如何处理它,甚至不知道如何准确地问这个问题(如果有人可以为我说的话)。我基本上需要按连接 2 中的项目分组,同时仍然保持连接 1 排序并放在一起。
如果有人能指出我可以做这样的事情的 LINQ 表达式的方向,那就太好了!
编辑
所以我使用了以下查询:
var wires = RedConductorWires
.OrderBy(x => x.Label)
.GroupBy(x => new { x.Connection2, x.Connection1 })
.Select(grp => grp.ToList()).SelectMany(i => i).ToList();
并得到正确的分组。现在我只需要让它按字母顺序排序。见下图。
解决方案
想象一下这条线
A - B
C - B
C - D
A - D
您可以以任何您喜欢的方式对行重新排序,或者将第一列分组或将第二列分组。但你永远不能同时拥有两者
推荐阅读
- eloquent - eloquent 5.6 模型创建功能未找到
- nginx - 多个网站的Nginx反向代理和root问题
- javascript - 匹配标签内的所有换行符
- highcharts - Higcharts - marginBottom 不允许渲染 xAxis 系列省略号
- javascript - 从另一个函数内部的回调函数返回值
- javascript - 浏览器在单个会话中存储下载的资产多长时间
- signals - 将信号值放入 CAPL 中的变量中
- python - 如何将字典的特定属性设置为 []
- mysql - 在链接的 MySQL 服务器中查询 6 个表中的 3 个时出错
- c# - 将一系列图像引用添加到数组