Закрыто Xml InsertTable со свойством IEnumerable - PullRequest
0 голосов
/ 27 апреля 2020

Приняли унаследованный проект, который использует Closed XML. Метод, который создает ошибку, берет

IEnumerable<MainObject> rows 

и создает его лист. Но в MainObject существует свойство другого

IEnumerable<Object1>

. Код выполняет это с помощью

                worksheet.Cell(startRow, 1).InsertTable(rows);

И при этом я получаю

An unhandled exception has occurred: Unable to set cell value to System.Collections.Generic.List`1[Object1]
System.ArgumentException: Unable to set cell value to System.Collections.Generic.List`1[Object1]

Я предполагаю, что мне нужно создать еще один (переопределенный?) InsertTable, который использует отражение для вызова правильного типы, а затем даже использует InsertTable для свойства IEnumerable. Но можно было бы использовать какой-то рекурсивный вызов в переопределенной функции и пропустить все пользовательские сопоставления?

Любая идея или предложения были бы хорошими.

1 Ответ

1 голос
/ 27 апреля 2020

Закрыто XML не знает, как обращаться с внутренним Object1 в каждом ряду. Проще, если вы создадите свои собственные IEnumerable<> ваших собственных объектов POCO и вызовете InsertTable для этого, например,

var pocos = rows.Select(m => new { m.Property1, m.Property2, m.Object1.OtherProperty });
worksheet.Cell(startRow, 1).InsertTable(pocos);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...