Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ C基于列将两行合并为一行#_C#_Linq_Linq To Objects - Fatal编程技术网

C# 使用LINQ C基于列将两行合并为一行#

C# 使用LINQ C基于列将两行合并为一行#,c#,linq,linq-to-objects,C#,Linq,Linq To Objects,我有一个如下的对象列表。我想根据B列将每两行合并为一行。可以肯定的是,对于每一列B值,只有两行 输入 输出 然而,我已经做到了,解决方案是有效的。但我正在寻找更好的解决方案。我对我的解决方案不太满意 我的解决方案: var groupByItems = items.GroupBy(x => x.ColumnB).Select(x => new MappingClass { ColumnA= x.FirstOrDefault().Column

我有一个如下的对象列表。我想根据B列将每两行合并为一行。可以肯定的是,对于每一列B值,只有两行

输入

输出

然而,我已经做到了,解决方案是有效的。但我正在寻找更好的解决方案。我对我的解决方案不太满意

我的解决方案:

var groupByItems = items.GroupBy(x => x.ColumnB).Select(x => new MappingClass
        {
            ColumnA= x.FirstOrDefault().ColumnA,
            ColumnB= x.FirstOrDefault().ColumnB,
            ColumnC= x.Where(r=> !string.IsNullOrEmpty(r.ColumnC)).Select(r=>r.ColumnC).FirstOrDefault(),
            ColumnD= x.Where(r => !string.IsNullOrEmpty(r.ColumnD)).Select(r => r.ColumnD).FirstOrDefault(),
        }).ToList();

现在groupByItems对象按预期返回两行。

您可以使用由
GroupBy()生成的组的键。
此外,无需使用
。Where()
您只需将过滤器作为lambda表达式放入
。FirstOrDefault()
中即可用于ColumnC和ColumnD

var groupByItems = items.GroupBy(x => new { ColumnA = x.ColumnA, ColumnB = x.ColumnB })
                        .Select(x => new MappingClass
                        {
                            ColumnA = x.Key.ColumnA,
                            ColumnB = x.Key.ColumnB,
                            ColumnC = x.FirstOrDefault(m => !string.IsNullOrEmpty(m.ColumnC)).ColumnC,
                            ColumnD = x.FirstOrDefault(m => !string.IsNullOrEmpty(m.ColumnD)).ColumnD
                        })
                        .ToList();

你想按b列分组吗?@auburg是的。想按列B分组。到目前为止,您得到了什么代码?“你被困在哪一点上?”奥伯格在下面的问题中补充了我的答案。然而,我的解决方案是可行的,但我不满意它,并在寻找更好的解决方案。我认为它可以。因此,它不是建议改进工作代码的地方。也许寄到。我看你做的事没什么错