powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как сгруппировать данные
6 сообщений из 6, страница 1 из 1
как сгруппировать данные
    #37132831
~PJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги

Есть задача . Дано List<Class1> где Class1 {string a,string b,string c}

Пример 7,8,1
7,8,2
7,8,3
7,9,1
8,9,1
нужно группировать по a ,b c-concat(;) т.е. имеем List<Class2> Class2{string a,string b,string c}
должно быть так
7,8, 1;2;3
7,9, 1
8,9, 1

как красиво решить ?
...
Рейтинг: 0 / 0
как сгруппировать данные
    #37133167
~PJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаю так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 var box = new List<Class1>();
  var bag = from p in box
                                 group p by new { p.aa, p.bb } into Group
                                 select new
                                 {
                                     aa = Group.Key,
                                     bb = Group.Key,
                                     cc = Group.Aggregate((a, b) => new { aa = a.a, bb = a.b, cc = (a.cc + ";" + b.cc) }).cc
                                 };

но компилятор ругает подчеркивает в предикате new
Cannot implicitly convert type 'AnonymousType#1' to 'Class1'
: error CS1662: Cannot convert lambda expression to delegate type .Class1,Class1>' because some of the return types in the block are not implicitly convertible to the delegate return type
...
Рейтинг: 0 / 0
как сгруппировать данные
    #37133229
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aggregate должен возвращать тип класса Сlass1 , а у вы пытаетесь анонимный тип вернуть
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var list = new List<Class1>(new[] 
                { 
                    new Class1() { A= "7", B = "8", C= "1"},
                    new Class1() { A= "7", B = "8", C= "2"},
                    new Class1() { A= "7", B = "8", C= "3"},
                    new Class1() { A= "7", B = "9", C= "1"},
                    new Class1() { A= "8", B = "9", C= "1"}
                });

            var result = list.GroupBy(c1 => new { A = c1.A, B = c1.B })
                .Select(g => new { aa = g.Key.A, bb = g.Key.B, cc = string.Join(";", g.Select(c => c.C)) });

            foreach (var g in result)
            {
                Console.WriteLine("{0} {1} {2}", g.aa, g.bb, g.cc);
            }
...
Рейтинг: 0 / 0
как сгруппировать данные
    #37133315
~PJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stimpi,

Спасибо

Код: plaintext
1.
 .Select (g=>new {A=g.Key.A,B=g.Key.B,C=string.Join(";",g.Select(z=> z.C)) });

не нравится компилятору string.Join

получаю ошибку The best overloaded method match for 'string.Join(string, string[])' has some invalid arguments
: error CS1503: Argument 2: cannot convert from 'System.Collections.Generic.IEnumerable<string>' to 'string[]'
...
Рейтинг: 0 / 0
как сгруппировать данные
    #37133356
~PJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
~PJ,

может кто еще посмотрит , но string.Join не нравится компилятору

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 class Program
    {
        public class Class1
        {
           public string A { get; set; }
           public string B { get; set; }
           public string C { get; set; }
        }

        static void Main(string[] args)
        {
            
            var list = new List<Class1>(new[] 
                { 
                    new Class1() { A= "7", B = "8", C= "1"},
                    new Class1() { A= "7", B = "8", C= "2"},
                    new Class1() { A= "7", B = "8", C= "3"},
                    new Class1() { A= "7", B = "9", C= "1"},
                    new Class1() { A= "8", B = "9", C= "1"}
                });

            var result = list.GroupBy(c1 => new { A = c1.A, B = c1.B })
                .Select(g => new { aa = g.Key.A, bb = g.Key.B, cc = string.Join(";", g.Select(c => c.C)) });

            foreach (var g in result)
            {
                Console.WriteLine("{0} {1} {2}", g.aa, g.bb, g.cc);
            }
        }
    }
...
Рейтинг: 0 / 0
как сгруппировать данные
    #37133407
~PJ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
~PJ,

закрыто

cc = string.Join(";",g.Select(c => c.C).ToArray()) });
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как сгруппировать данные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]