簡體   English   中英

如何使用Linq獲得此分組結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM