У меня есть объект с именем 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 ...
Нажмите здесь, чтобы увидеть
Как я могу это сделать?