Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как сгруппировать данные / 6 сообщений из 6, страница 1 из 1
24.02.2011, 00:30
    #37132831
~PJ
~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
24.02.2011, 10:44
    #37133167
~PJ
~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
24.02.2011, 11:05
    #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
24.02.2011, 11:38
    #37133315
~PJ
~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
24.02.2011, 11:53
    #37133356
~PJ
~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
24.02.2011, 12:13
    #37133407
~PJ
~PJ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сгруппировать данные
~PJ,

закрыто

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


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