Заказать сгруппированные данные с помощью LINQ - PullRequest
0 голосов
/ 10 июня 2011

Это данные, которые я прочитал из базы данных в таблицу данных.

enter image description here

изменяемая таблица именованных таблиц теперь изменена.

Для каждого такого же / отдельного UnitType + UnitZoom + MemberZoom я создаю новый Unit и считываю MemberId в MemberListId - это должно происходить в Порядке, заданном номером MemberOrder. Пример данных:

Единица 1: A B C -> P1, P2
Единица 2: 1 2 3 -> P9, P12, P4
Единица 3: H23 B10 T15 -> X4, T5, Z3, Y1

Мой код на данный момент неправильно сортируется:

 var groupedCollection = table.AsEnumerable()
                                        .GroupBy(row => new
                                        {
                                            UType = row.Field<string>("UnitType"),
                                            UZoom = row.Field<string>("UnitZoom"),
                                            MZoom = row.Field<string>("MemberZoom"),
                                            MOrder = row.Field<int>("MemberOrder"), 
  // I DO NOT WANT the MemberOrder to be in the Group Key, but later on I use this Property to order by it... 
                                        });         


                var unitCollection = groupedCollection
                                    .Select(g => new Unit 
                                    {
                                        UnitType = g.Key.UType,
                                        UnitZoom = g.Key.UZoom,
                                        MemberZoom = g.Key.MZoom,                                   
                                        MemberIdList = g.Select(r => r.Field<string>("MemberId")).OrderBy(b => g.Key.MOrder).ToList(),
                                    });

                List<Unit> units = unitCollection.ToList(); 

1 Ответ

1 голос
/ 10 июня 2011

Упорядочение по статическому значению для списка:

MemberIdList = g.Select(r => r.Field<string>("MemberId")).OrderBy(b => g.Key.MOrder).ToList()

U должно использовать что-то вроде этого: OrderBy(b => b.SomeValue)

это должно выглядеть так:

var groupedCollection = table.AsEnumerable()
                                    .GroupBy(row => new
                                    {
                                        UType = row.Field<string>("UnitType"),
                                        UZoom = row.Field<string>("UnitZoom"),
                                        MZoom = row.Field<string>("MemberZoom") 
                                    });         


            var unitCollection = groupedCollection
                                .Select(g => new Unit 
                                {
                                    UnitType = g.Key.UType,
                                    UnitZoom = g.Key.UZoom,
                                    MemberZoom = g.Key.MZoom,                                   
                                    MemberIdList = g.OrderBy(b => b.Field<int>("MemberOrder").Select(r => r.Field<string>("MemberId")).ToList(),
                                });

            List<Unit> units = unitCollection.ToList();
...