Сводная таблица NReco с IEnumerable <T> - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть объект с именем SmtpUser , который в основном является пользователем, отправившим электронное письмо

public partial class SmtpUser
    {
        public DateTime NDate { get; set; }

        public string NFrom { get; set; }

        public string NTo { get; set; }

        public string NBytes { get; set; }

        public long NCount { get; set; }
    }

У меня есть объект SmtpUser s , который является списком

У меня есть значения тезисов в SmtpUsers:

SmtpUsers.AddRange(new List<SmtpUser>() {
            new SmtpUser() { NDate = "11/09/2019 16:22:00".ToDateTime() , NFrom = "jdoe@domain.com", NTo = "pmia@domain2.com", NBytes = "1", NCount = 1 },
                new SmtpUser() { NDate = "12/09/2019 16:22:00".ToDateTime() , NFrom = "fpolo@domain.com", NTo = "kholy@domain2.com", NBytes = "1", NCount = 2 },
                new SmtpUser() { NDate = "13/09/2019 16:22:00".ToDateTime(), NFrom = "fpolo@domain.com", NTo = "wfred@domain2.com", NBytes = "2", NCount = 1 },
                new SmtpUser() { NDate = "12/09/2019 16:22:00".ToDateTime(), NFrom = "ljan@domain.com", NTo = "heagle@domain2.com", NBytes = "1", NCount = 3 },
                new SmtpUser() { NDate = "14/09/2019 16:22:00".ToDateTime(), NFrom = "mfranck@domain.com", NTo = "pmia@domain2.com", NBytes = "1", NCount = 1 },
                new SmtpUser() { NDate = "14/09/2019 16:22:00".ToDateTime(), NFrom = "jdoe@domain.com", NTo = "pmia@domain2.com", NBytes = "1", NCount = 8 }
            });

Теперь я сгруппировал SmtpUsers по DateOf в groupedSmtpUsers

var groupedSmtpUsers =
                from groupedSmtpUser in SmtpUsers
                group groupedSmtpUser by new
                {
                    From = groupedSmtpUser.NFrom.ToLower()
                } into smtpList
                select new
                {
                    smtpList.Key.From,
                    Mails = smtpList.GroupBy(m => m.NDate.ToShortDateString()).Select(
                        p => new { DateOf = p.Key, MailsSentOnThisDate = p.ToList() }
                        ).ToList()
                };

ВотGIF, который показывает groupedSmtpUsers

. Я хотел бы создать сводную таблицу (используя библиотеку NReco или любую другую, если честно) и экспортировать ее в Excel.

В моем Excel я хотел бы иметь возможность видеть DateOf (строки) и From (столбцы). И для каждого DateOf мне нужно иметь возможность видеть каждый MailsSentOnThisDate с его свойствами дочернего объекта (NFrom, NDate ....)

Что я пробовал:

var pvtData = new PivotData(new[] { "From", "Mails" }, new CountAggregatorFactory());
            pvtData.ProcessData(groupedSmtpUsers, new ObjectMember().GetValue);

            var pkg = new ExcelPackage();
            pkg.Compression = CompressionLevel.Default;
            var wsPvt = pkg.Workbook.Worksheets.Add("Pivot Table");
            var wsData = pkg.Workbook.Worksheets.Add("Source Data");

            var pvtTbl = new PivotTable(
                new[] { "From" },
                new[] { "Mails" },
                pvtData);

            var excelPvtTblWr = new ExcelPivotTableWriter(wsPvt, wsData);
            excelPvtTblWr.Write(pvtTbl);
            using (var excelFs = new FileStream("result.xlsx", FileMode.Create, FileAccess.Write))
            {
                pkg.SaveAs(excelFs);
            }

Это результат. Xlsx ...

Нажмите здесь, чтобы увидеть

Как я могу это сделать?

...