Esiste una sintassi di inizializzazione per lo ExpandoObject
che posso utilizzare a mio vantaggio in una query LINQ su XML per scopi di brevità?Un modo breve per ottenere oggetti dinamici da LINQ a XML seleziona query?
Nota: i risultati della query devono essere inoltrati al di fuori dell'ambito dell'assembly corrente, pertanto i tipi anonimi non sono disponibili (see why here).
Sto cercando di usare la sintassi breve come gli oggetti seguenti per creare dinamiche/expando:
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;
}
soluzioni più coinvolti per fare questo lavoro di codice potrebbe essere:
- creare classe concreta e inizializzalo invece (ma non voglio crearne un mucchio).
- uso tipo anonimo e copiare i suoi membri a un oggetto dinamico (un po 'ridondante) e restituire gli oggetti dinamici
C'è un altrettanto breve sintassi per ottenere quello che intendo fare con il codice errato in questione, o dovrò espandere il codice base in qualche modo per ottenere il risultato desiderato?