Существует ли синтаксис инициализации для ExpandoObject
, который я могу использовать в своих интересах в запросе LINQ to XML для краткости?
Примечание: результаты запроса предназначены для передачи за пределы области текущей сборки, поэтому анонимные типы исключены (, посмотрите, почему здесь ).
Я пытаюсь использовать краткий синтаксис, подобный следующему, для создания динамических / расширяемых объектов:
public IEnumerable<dynamic> ParseUserXml(string strXmlUser) {
var qClients =
from client in xdoc.Root.Element(XKey.clients).Elements(XKey.client)
// client object
// I cannot get ExpandoObject to initialize inline
select new ExpandoObject() { // try initialization syntax, COMPILE ERR
OnlineDetails = new
{
Password = client.Element(XKey.onlineDetails).
Element(XKey.password).Value,
Roles = client.Element(XKey.onlineDetails).
Element(XKey.roles).Elements(XKey.roleId).
Select(xroleid => xroleid.Value)
// More online detail fields TBD
},
// etc ....
// YIELD DYNAMIC OBJECTS BACK THROUGH IEnumerable<dynamic>...
foreach (var client in qClients)
{
yield return client;
}
Более сложные решения для работы этого кода:
- создайте конкретный класс и инициализируйте его вместо этого (но я не хочу создавать кучу таких).
- использует анонимный тип и копирует его члены в динамический объект (несколько избыточный) и возвращает динамические объекты
Существует ли такой же короткий синтаксис для достижения того, что я намерен делать с помощью ошибочного кода, о котором идет речь, или мне придется каким-то образом расширять кодовую базу, чтобы получить желаемый результат?