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;
}
使此代码工作的更多涉及的解决方案可能是:
- 创建具体类并改为初始化它(但我不想创建一堆)。
- 使用匿名类型并将其成员复制到动态对象(有些多余)并返回动态对象
是否有同样短的语法来实现我打算通过有问题的错误代码执行的操作,或者我是否必须以某种方式扩展代码库以获得所需的结果?