Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LINQ (Language-Integrated Query) > LINQ-запрос и сведение массива в строку


Автор: swetik1981 15.9.2014, 23:04
Имеется таблица примерно следующего содержания:
Код

1   Иван
2   Николай
3   Алексей
1   Василий
2   Михаил
2   Егор
2   Тимофей
3   Игорь
4   Иван
4   Михаил


Необходимо сгруппировать строки в таблице по значениям одного из столбцов и при этом все вариации другого столбца для каждого из значений первго столбца просто свести в строку. Иными словами  получить следующую таблицу:
Код

1   Иван, Василий
2   Николай, Михаил, Егор, Тимофей
3   Алексей, Игорь
4   Иван, Михаил


Как это сделать только посредством LINQ запроса (без использования циклов)?

Автор: Miller_time 20.10.2014, 18:09
Код

namespace TestMyAPP
{
    class Program
    {

        public class UserData
        {
            public int Group { get; set; }
            public string Value { get; set; }

            public UserData(int Group, string Value)
            {
                this.Group = Group;
                this.Value = Value;
            }
        }

        static void Main(string[] args)
        {
            Console.WriteLine("{0}", "Start APP");
            List<UserData> items = new List<UserData> { 
                new UserData(1,"Иван"),
                new UserData(2,"Николай"),
                new UserData(3,"Алексей"),
                new UserData(4,"Василий"),
                new UserData(1,"Михаил"),
                new UserData(2,"Егор"),
                new UserData(3,"Тимофей"),
                new UserData(4,"Игорь"),
                new UserData(5,"Михаил"),
            };
            var Users = from g in items
                        group g by g.Group into p
                        select new 
                        {
                            p.Key,
                            Data = string.Join(",", (from d in items
                                        where d.Group == p.Key
                                        select d.Value).ToArray())

                        };
            foreach (var d1 in Users)
            {
                Console.WriteLine("{0} - {1}", d1.Key,d1.Data);
            }
            Console.ReadLine();
        }
    }
}


Ну вот как то так можно попробовать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)