0

我有一个类 Foo 如下。

public class Foo
{
    public string Name { get; set; }
    public string Value { get; set; }   
}

我有一个此类的集合,比如说列表,有时我在集合中有如下数据。

名称 值   
吉米你好   
吉米世界   
彼得如何  
彼得是你吗?   
苏珊娜 我很好

我想将相同名称的值字段组合为以下内容

名称 值  
吉米你好世界  
彼得你好吗?  
苏珊娜 我很好  

无论如何这可以使用Linq来完成吗?

4

3 回答 3

7

GroupBy您可以按如下方式使用 Linq :

fooCollection.GroupBy(foo => foo.Name)

    // create a new "Foo" object based on each grouping
    .Select(g => new Foo() { 

        // "Name" becomes the group key (ie, "Jimmy", "Peter", etc)
        Name = g.Key, 

        // "Value" becomes the Value for all Foo in this group, concatenated
        Value = string.Join(" ", g.Select(item => item.Value).ToArray()) 
    })
    .ToArray();
于 2012-09-07T16:55:36.510 回答
1

这在我看来像是某种聊天功能。所有其他答案都适合常规使用,并且适用于您提供的示例案例,但我相信您需要进行连续分组。

假设您有这样的数据:

Name Value
Jimmy hello
Jimmy world
Peter how
Peter are you?
Suzanne I am fine
Jimmy OK, bye

注意底部的另一个 Jimmy 值。如果您像其他人建议的那样仅使用常规分组,结果将是:

Name Value
Jimmy hello world OK, bye
Peter how are you?
Suzanne I am fine 

你可能会想要这样的东西:

Name Value
Jimmy hello world
Peter how are you?
Suzanne I am fine 
Jimmy OK, bye

看看这个 SO 问题,了解如何进行连续分组:如何使用 Linq (C#) 分隔所有连续对象

于 2012-09-07T17:18:59.250 回答
0
from a in myList
group a by a.Name
into g
select new Foo {
                 Name = g.Key.Name,
                 Value = string.Join(" ",g.Select(x=>x.Value).ToArray()
               };
于 2012-09-07T16:57:43.820 回答