Сетки Epplus linq в Excel - PullRequest
       7

Сетки Epplus linq в Excel

0 голосов
/ 10 декабря 2018

Полагаю, я ошибался или неправильно формулировал это.

У меня есть контроллер с запросом 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",                   
            },
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...