[英]how to get this grouped result using Linq
我的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
我想合並與以下名稱相同的值字段
Name Value Jimmy hello World Peter how are you? Suzanne I am fine
無論如何,可以使用Linq完成此操作嗎?
您可以按以下方式使用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();
在我看來,這類似於某種聊天功能。 所有其他答案都適合常規使用,並且適用於您提供的示例案例,但是我相信您需要進行連續分組。
假設您擁有這樣的數據:
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()
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.