Reza Jenabi
Reza Jenabi

Reputation: 4279

group by and merge some field result in linq

I have a class like

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Now I have a list of this class: List<Person> persons;

var persons = new List<Person> {
            new Person { Id = 1, LastName = "Reza", FirstName="Jenabi" },
            new Person { Id = 1, LastName = "Amin", FirstName="Golmahalle"},
            new Person { Id = 2, LastName = "Hamed", FirstName="Naeemaei"}
        };

Is there a way I can group by Id and get the list of all the full Name (Combine first and last names)?

So after grouping:

var Id = results[0].Id; // Output : 1
List<string> fullNames = results[0].FullNames; // Output : "Reza Jenabi","Amin Golmahalle"

Upvotes: 0

Views: 209

Answers (3)

user12624136
user12624136

Reputation:

I think bellow code can help you:

var fff = from p in persons
        group $"{p.FirstName} {p.LastName}" by p.Id into g
        select new { PersonId = g.Key, FullNames = g.ToList() };

Upvotes: 1

Piotr L
Piotr L

Reputation: 989

I believe this is what you need:

var results = persons.GroupBy(x => x.Id)
    .Select(x => new { Id = x.Key, FullNames = x.Select(p => $"{p.FirstName} {p.LastName}").ToList() })
    .ToList();

Upvotes: 3

StepUp
StepUp

Reputation: 38094

yeah, you can use GroupBy and Join those items:

var grouped = persons.GroupBy(p => p.Id)
    .Select(s => string.Join(", ", s.Select(a=> $"{a.FirstName} {a.LastName}")));

Upvotes: 0

Related Questions