C# 使用LINQ对项目进行分组和组合

C# 使用LINQ对项目进行分组和组合,c#,.net,linq,C#,.net,Linq,在code上使用GroupBy,然后使用string.Join()对其进行迭代以获得要组合的各个元素 输出: var results = products .GroupBy ( p => p.Code ) .Select ( g => new { Code = g.Key, Name = string.Join (

code
上使用
GroupBy
,然后使用
string.Join()
对其进行迭代以获得要组合的各个元素

输出:

var results = products
    .GroupBy
    ( 
        p => p.Code
    )
    .Select
    (
        g => new 
        {
            Code = g.Key, 
            Name = string.Join
            (
                ",",
                g.Select( p => p.Name )
            ), 
            Amount = string.Join
            (
                ",", 
                g.Select( p => p.Amount.ToString() )
            )
        }
    );

code
上使用
GroupBy
,然后使用
string.Join()
对其进行迭代以获得要组合的各个元素

输出:

var results = products
    .GroupBy
    ( 
        p => p.Code
    )
    .Select
    (
        g => new 
        {
            Code = g.Key, 
            Name = string.Join
            (
                ",",
                g.Select( p => p.Name )
            ), 
            Amount = string.Join
            (
                ",", 
                g.Select( p => p.Amount.ToString() )
            )
        }
    );

这是一个很好的问题,除了没有预期的输出之外,描述它的部分有一点ambiguous@TheGeneral编辑后,我把预期的result@John我的逻辑是将重复代码和唯一代码分离到不同的列表中,然后处理重复代码,然后将它们添加到具有唯一代码的产品列表中,为什么?为什么不使用单个
.GroupBy(…)。选择(…)
?毕竟,一个项目会变成一个包含一个项目的组,然后作为一个项目出现在另一边。这是一个好问题,除了没有预期的输出,并且描述它的部分有点小ambiguous@TheGeneral编辑,我把预期的result@John我的逻辑是将重复代码和唯一代码分离到不同的列表中,然后处理重复代码,然后将它们添加到具有唯一代码的产品列表中。为什么?为什么不使用单个
.GroupBy(…)。选择(…)
?毕竟,一个项目将成为一个有单个项目的组,然后作为单个项目出现在另一边。
Code  Name              Amount
A1    Vacuum            10
A2    Iron, Microwave   20, 11
A3    Kettle, Dryer     13, 3
var results = products
    .GroupBy
    ( 
        p => p.Code
    )
    .Select
    (
        g => new 
        {
            Code = g.Key, 
            Name = string.Join
            (
                ",",
                g.Select( p => p.Name )
            ), 
            Amount = string.Join
            (
                ",", 
                g.Select( p => p.Amount.ToString() )
            )
        }
    );
A1 Vacuum 10
A2 Iron,Microwave 20,11
A3 Kettle,Dryer 13,3