我有一个类 Foo 如下。
public class Foo
{
public string Name { get; set; }
public string Value { get; set; }
}
我有一个此类的集合,比如说列表,有时我在集合中有如下数据。
名称 值 吉米你好 吉米世界 彼得如何 彼得是你吗? 苏珊娜 我很好
我想将相同名称的值字段组合为以下内容
名称 值 吉米你好世界 彼得你好吗? 苏珊娜 我很好
无论如何这可以使用Linq来完成吗?
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();
这在我看来像是某种聊天功能。所有其他答案都适合常规使用,并且适用于您提供的示例案例,但我相信您需要进行连续分组。
假设您有这样的数据:
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#) 分隔所有连续对象
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()
};