Порядок asp.net и списки GroupBy в словаре в классе контроллера mvc3 - PullRequest
1 голос
/ 20 июля 2011

Я работаю над приложением asp.net mvc3 с linq2sql.

У меня есть список типов объектов SiteLog, содержащий также для каждого объекта: строку с именем CLRExceptionType и дату с именем EntryDate.Этот список включен в словарь:

private Dictionary<string, List<SiteLog>> dataBaseList = new Dictionary<string, List<SiteLog>>();
DataClasses1DataContext db = new DataClasses1DataContext("string1");
DataClasses1DataContext db2 = new DataClasses1DataContext("string2");

И я заполняю словарь в том же контроллере в функции:

       private void CreateDictionary()
    {   
        dataBaseList.Add("db", db.SiteLogs.ToList());
        dataBaseList.Add("db2", db2.SiteLogs.ToList());
    }

Так что для каждой «Базы данных» у меня есть списокПроизошло исключение.

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

Так, например, выходные данные будут: Database1:
Exception1 (22 раза) в последний раз произошло: 22.10.1989 19: 30
Exception2 (2 раза) в последний раз произошло 20.5.1980 14.50

Затем объект неожиданно обновляется новой записью симя Exception2, поэтому мне нужно отобразить:
Exception2 (3 раза) в последний раз произошло 20.7.2011 9: 00
Exception1 (22 раза) в последний раз произошло: 22.10.1989 19: 30

Как я могу добиться этого, используя groupby или любое другое решение в контроллере?Я возвращаю словарь к просмотру.

Заранее спасибо

1 Ответ

1 голос
/ 20 июля 2011

Попробуйте это:

var result =
  dataBaseList.GroupBy(x => x.Key)
              .SelectMany(x =>
                            x.SelectMany(n => n.Value
                                               .GroupBy(g => g.CLRExceptionType)
                                               .Select(g => new
                                                            {
                                                              DB = x.Key,
                                                              Exception = g.Key,
                                                              Count = g.Count(), 
                                                              LastOccured = 
                                                               g.Max(y =>
                                                                     y.EntryDate)
                                                            })))
              .OrderBy(x => x.DB)
              .ThenByDescending(x => x.LastOccured);

Группирует ваш словарь по ключу (= база данных). Каждая группа затем группируется по типу исключения. Для каждой такой группы выбирается анонимный тип со всеми данными, которые вы хотите отобразить. SelectMany выравнивает данные с IEnumerable<IEnumerable<T>> до IEnumerable<T>. Затем результат упорядочивается базой данных, а затем - по дате последнего наступления. Результатом будет список экземпляров анонимного типа, каждый с информацией, которую вы хотите отобразить.

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