c# - 将一行中的重复项整理出来,但保留一个特定的
问题描述
我想要做的是,对于一列是不同的(或分组依据),但随后将其保留在我的列表中,该列具有第二列的值。
是)我有的
Column1 Column 2 Column3 ...
1 | tada | smth
1 | | wefih
2 | tada | uitethgev
3 | | urifnvf
what i want
Column1 Column 2 Column3 ...
1 | tada | smth
2 | tada | uitethgev
3 | | urifnvf
因为我只有一个“3”,所以我想把它放在我的列表中。2 相同,但 1 应该只保留 column2 中的值。
我想在 linq 查询中执行此操作。每一行都是一个具有代表列的属性的对象。这有什么线索吗?我知道如何通过使用多个列表并通过检查它的方法相互写入来实现它。但我认为可能有一个很好的 linq 方法来做到这一点。还请记住,我有更多的不仅仅是 3 列。
解决方案
你可以这样做linq
,特别是GroupBy
为什么不这样做:
1 - 我正在创建一个class
模拟您的需求:
public class TestClass
{
public int Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
}
2 - 我正在初始化TestClass
如下列表:
List<TestClass> testClasses = new List<TestClass>
{
new TestClass{Column1 = 1, Column2 = "tada", Column3 = "smth"},
new TestClass{Column1 = 1, Column2 = "msa", Column3 = "msa1"},
new TestClass{Column1 = 1, Column3 = "wefih"},
new TestClass{Column1 = 2, Column2 = "tada", Column3 = "uitethgev"},
new TestClass{Column1 = 3, Column3 = "urifnvf"},
};
3 -groupBy
用于过滤您的列表,通过测试count
分组元素是否大于或等于2
:
if count >= 2
column2
:取第一个不为空的元素else : 取元素而不过滤
List<TestClass> groupedList = testClasses
.GroupBy(x => x.Column1)
.Select(y => y.Count() >= 2 ? y.First(z => !string.IsNullOrEmpty(z.Column2)) : y.First())
.ToList();
3 的结果:
Column1|Column 2| Column3 ...
1 | tada | smth
2 | tada | uitethgev
3 | | urifnvf
4 - 如果您需要全部不column2
为空,如果count
大于2
,请尝试以下代码:
List<TestClass> groupedList = testClasses
.GroupBy(x => x.Column1)
.SelectMany(y => y.Count() >= 2 ? y.TakeWhile(z => !string.IsNullOrEmpty(z.Column2)) : y)
.ToList();
4的结果:
Column1|Column 2| Column3 ...
1 | tada | smth
1 | msa | msa1
2 | tada | uitethgev
3 | | urifnvf
我希望这会给你一个答案
推荐阅读
- javascript - xmlDoc.getElementsByTagName - 多个相同的标签名称,只从某个父级获得一个?
- python - 谁能帮我解决这个 PyCharm 和 Import Modular 错误?
- asp.net-core - 如何在 asp.net 核心日志记录和应用程序洞察中记录 json
- javascript - 如何使用 cypress 视口刷新重新加载
- powershell - Powershell 将 CSV 数据输出到多行而不是单行
- sql - 防止重复预订的触发器总是标记
- python - 基于具有自定义单元格宽度和高度的 Numpy 2d 数组创建 NonUniformImage
- elasticsearch - 未登录 Kibana 的弹性搜索警报
- osc - 如何在 sclang 中使用数组值作为函数参数(在通过 OSC 发送大量浮点数的情况下)
- javascript - 遇到断点时捕获/防止页面更改:Firefox