Сгруппируйте элементы с помощью Linq и отобразите в таблице в виде MVC - PullRequest
0 голосов
/ 26 ноября 2010

Я хочу иметь возможность отображать данные из базы данных, сгруппированной по категориям.Приложение представляет собой попытку применения расписания.Схема базы данных выглядит следующим образом:

(table) TimeSegments
TimeSegmentID
Hours
Date
ConsultantID (FK)
TaskID (FK)
ProjectID (FK)

(table) Projects
ProjectID
ProjectName

(table) Tasks
TaskID
TaskName

(table) Consultants
ConsultantID
ConsultantName

Я могу получить данные из модели (здесь называемые ts) и отобразить их, но я хочу, чтобы они были сгруппированы так, чтобы я мог показывать часы по проекту и задаче,Вот моя попытка до сих пор.Я предположил, что выражение group в Linq будет уместным, но я не знаю, правильно ли это:

    public IList<TimeSegment> TimeSegmentsByProject
    {
        get
        {
            var projectGroups = from timeSegment in ts.TimeSegments
                                group timeSegment by timeSegment.Project
                                into projectGroup
                                select projectGroup;
            return projectGroups.ToList(); //Doesn't work
        }
    }

Теперь это не удается, потому что результат не может быть преобразован в список в соответствии с компилятором.Я думал, что это выражение даст мне коллекцию коллекций, и что я смогу вернуть это, получить его в контроллере и передать его в представление для отображения.Видимо, нет.

Так как мне поступить?Если бы кто-нибудь мог показать мне, как вернуть правильный тип, и, предпочтительно, также дать мне пример того, как представление может получить его и отобразить его по категориям в Project, я был бы очень признателен!

РЕДАКТИРОВАТЬ:

Это тоже не работает (тип возврата, предложенный The_Smallest ниже):

    public IGrouping<Project, TimeSegment> TimeSegmentsByProject
    {
        get
        {
            var projectGroups = from timeSegment in ts.TimeSegments
                                group timeSegment by timeSegment.Project
                                into projectGroup
                                select projectGroup;
            return projectGroups;
        }
    }

Компилятор говорит, что не может конвертировать [blabla] IQueryable в этот тип (типы похожи, но тип возврата)IQueryable)

1 Ответ

1 голос
/ 26 ноября 2010

После групповой команды linq возвращает IEnumerable<IGrouping<TKey, TValue>>, в то время как вы ожидаете, что оно будет IEnumerable<TimeSegment>.
В вашем примере вы можете изменить тип возврата вашего метода с IList<TimeSegment> IEnumerable<IGrouping<Project, TimeSegment>>, где тип проекта timeSegment.Project
PS: Вы можете изменить IEnumerable на Array или IList (что хотите, просто не забудьте добавить .ToArray() или .ToList())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...