我有一个Foo类如下。
public class Foo
{
public string Name { get; set; }
public string Value { get; set; }
}
我有一个这个类的集合让我们说List,有时我在集合中有如下数据。
Name Value Jimmy hello Jimmy World Peter how Peter are you? Suzanne I am fine
我想将相同名称的值字段组合为folows
Name Value Jimmy hello World Peter how are you? Suzanne I am fine
无论如何,这可以使用Linq完成吗?
答案 0 :(得分:7)
您可以按如下方式使用Linq GroupBy
:
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();
答案 1 :(得分:1)
这对我来说就像某种聊天功能。所有其他答案都适合经常使用,适用于您提供的示例案例,但我相信您需要进行连续分组。
假设你有这样的数据:
Name Value
Jimmy hello
Jimmy world
Peter how
Peter are you?
Suzanne I am fine
Jimmy OK, bye
注意底部的另一个吉米值。如果你像其他人建议的那样只使用常规分组,那么结果将是:
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问题,了解如何进行连续分组:How to separate all consecutive Objects using Linq (C#)
答案 2 :(得分: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()
};