Полагаю, я ошибался или неправильно формулировал это.
У меня есть контроллер с запросом LINQ, который возвращает список, и в нем содержится дочерний список для каждого элемента.Я использую EPPlus для создания документа Excel для него, и пока он работает, пока я не хочу добавить в список детей.
Что я хочу сделать, так это иметь опцию раскрытия для каждого элемента строки, которая расширяется до подсписка внутри каждого элемента.Ниже приведен код, который у меня есть.
Контроллер (я выделил это для примера здесь, так что, если что-то не так, просто из-за взлома и задания. Results.ToList () на самом деле был довольно длинным запросом LINQ.
[HttpGet]
[Route("Download")]
public FileContentResult Download(int? mid)
{
using (var package = new ExcelPackage())
{
byte[] fileContents;
using (var ctx = new dbEntities())
{
results.ToList();
var merchantIdList = (results.GroupBy(t => t.DomainMerchantID, t => t.violations)
.OrderBy(g => g.Key)
.Select(g => g.Key).ToList());
var resultList = new List<ViolationsByMerchant>();
foreach (int? id in merchantIdList)
{
var thisResult = (from r in results
where r.violations.DomainMerchantID == id
orderby r.violations.DateOfInfraction descending
select new ViolationsByMerchant
{
SellerDomain = r.DomainName,
Merchant = r.IdentifierNiceName,
Contact = r.str_Name,
Phone = r.str_Phone,
AccountMatch = "????",
ViolationsProductDetails = from v in results
where v.violations.DomainMerchantID == id
select new ViolationsProductDetails()
{
ProductName = r.memberProducts.ProductName,
ProductLine = r.memberProducts.ProductLine,
Category = r.memberProducts.ProductCategory
}
}).FirstOrDefault();
resultList.Add(thisResult);
}
var worksheet = package.Workbook.Worksheets.Add("Merchant Violations");
int i = 1;
foreach (var item in resultList)
{
worksheet.Cells["A1:Z1"].Style.Font.Size = 15;
worksheet.Cells.AutoFitColumns();
worksheet.Cells["A1:Z1"].Style.Font.Bold = true;
worksheet.Cells[1, 1].Value = "Merchant";
worksheet.Cells["A" + i].Value = item.Merchant;
worksheet.Cells[1, 2].Value = "Account Match";
worksheet.Cells["B" + i].Value = item.AccountMatch;
worksheet.Cells[1, 3].Value = "Seller";
worksheet.Cells["C" + i].Value = item.SellerDomain;
worksheet.Cells[1, 4].Value = "Contact";
worksheet.Cells["D" + i].Value = item.Contact;
worksheet.Cells[1, 5].Value = "Phone";
worksheet.Cells["E" + i].Value = item.Phone;
i++;
}
fileContents = package.GetAsByteArray();
}
return File(
fileContents: fileContents,
contentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
fileDownloadName: "MyMappProducts.xlsx"
);
}
}
LINQ Возвращает что-то вроде этого, если это помогает.
{
"merchant": "Foo Merchant,
"accountMatch": "True",
"sellerDomain": "Amazon",
"contact": "John Doe",
"phone": "555-555-5555
"violationsProductDetails": [
{
"productName": "King Kong",
"productLine": "Animal",
"category": "King of the jungle",
},
{
"productName": "Prime",
"productLine": "Transformers",
"category": "Toy",
},
}