Как объединить строки с помощью LINQ?

#linq #entity-framework #linq-to-entities

#linq #entity-framework #linq-to-entities

Вопрос:

Допустим, у меня есть объект со следующими свойствами [Id, UserName, ProductName], где Id — это PK, а другие поля не уникальны, поэтому строки с одним и тем же именем пользователя повторяются несколько раз.

Для одного из представлений мне нужно получить коллекцию, которая будет иметь уникальное имя пользователя, а другие поля будут объединены вместе с помощью конкатенации строк или чего-то подобного.

Если у меня есть

 [0, John, Alpha]
[1, Mary, Beta]
[2, John, Gamma]
  

Мне нужен запрос, который бы дал мне коллекцию, например

 [John, Alpha Gamma]
[Mary, Beta]
  

И было бы здорово, если бы все это можно было выполнить на стороне базы данных без загрузки сущностей.

Ответ №1:

Вы ищете GroupBy() :

 var results = context.MyEntities.GroupBy( x => x.UserName);

foreach (var item in results)
{
    Console.WriteLine("{0} : {1}", item.Key, string.Join(",", item.Select( x=> x.ProductName));
}