Есть ли простой способ сгруппировать EF ResultSet в новый объект? - PullRequest
1 голос
/ 16 сентября 2011

У меня есть хранимая процедура EF (импорт функции), которая возвращает набор результатов, и я хочу, чтобы этот набор результатов был сгруппирован на нескольких уровнях. Есть ли простой способ сгруппировать результаты в новый объект?

Мой набор результатов содержит объекты со следующими данными:

CategoryId
EventId
EventInstanceId
Name
DueDate

Я хотел бы сгруппировать результаты по категориям и событиям, поэтому я получаю Category.List<Event>.List<EventInstances>

class Category
{
    List<Event> Events;
}

class Event
{
    List<EventInstance> Instances;
}

1 Ответ

0 голосов
/ 16 сентября 2011

Ну, я собирался просто удалить свой вопрос, так как я разобрался с ним, но, поскольку голосование идет вверх, я опубликую найденное мной решение

List<CategoryModel> list =
    (from category in context.GetEvents(date, date) // Stored Procedure
        group category by category.CategoryId 
        into groupedByCategory // Group by Category
        select new CategoryModel
        {
            CategoryId = groupedByCategory.Key,
            Events = new ObservableCollection<EventModel>
            (
                from evt in groupedByCategory
                group evt by new { evt.EventId, evt.AssignedUserId, evt.EventName, evt.EventDescription, evt.IsRecurring } 
                into groupedByEvent // Sub-Group for Events
                select new EventModel
                {
                    EventId = groupedByCategory.Key,
                    AssignedUserId = groupedByEvent.Key.AssignedUserId,
                    EventDescription = groupedByEvent.Key.EventDescription,
                    EventName = groupedByEvent.Key.EventName,
                    IsRecurring = groupedByEvent.Key.IsRecurring,
                    Instances = new ObservableCollection<EventInstanceModel>
                        (
                            from item in groupedByEvent
                                select new EventInstanceModel
                                {
                                    CompletedDate = item.CompletedDate,
                                    CompletedUserId = item.CompletedUserId,
                                    DueDate = item.DueDate,
                                    EventInstanceId = item.EventInstanceId,
                                    IsSkipped = item.IsSkipped.GetValueOrDefault()
                                }
                        )
                }
            )
        }
    ).ToList();
...