Linq – No se puede convertir implícitamente el tipo ‘System.Las colecciones.Genérica.IEnumerable<Sistema.Xml.Linq.XElement>’ a ‘del Sistema.Las colecciones.Genérica.Lista de<cadena>’

Recibo el siguiente error:

No se puede convertir implícitamente el tipo ‘System.Las colecciones.Genérica.IEnumerable’ a ‘del Sistema.Las colecciones.Genérica.La lista’. Una conversión explícita existe (¿falta una pieza?)

Mi código es el siguiente :

 public Profile PullActiveProfile()
  {
   //currentProfile.Decks = new List<string>();
    return currentProfile = (from profiles in xmlDoc.Element("PlayerPofiles").Elements("Player")where (string)profiles.Element("Active") == "True"
    select new Profile
      {
       Name = (string)profiles.Element("Name"),
       Type = (string)profiles.Element("Type"),
       Verified = (string)profiles.Element("Verified"),
       Password = (string)profiles.Element("Password"),
       Email = (string)profiles.Element("Email"),
       Sex = (string)profiles.Element("Sex"),
       Avatar = (string)profiles.Element("Avatar").Attribute("path") ?? "",
       Created = (DateTime)profiles.Element("Created"),
       Birthday = (string)profiles.Element("Birthday") ?? "",
       Wins = (string)profiles.Element("Ratio").Element("Win") ?? "0",
       Losses = (string)profiles.Element("Ratio").Element("Loss") ?? "0",
       Abandoned = (string)profiles.Element("Ratio").Element("Abandoned"),
       //The following line is where I get the error. The decks node can have many descendants
       Decks = profiles.Elements("Decks").Descendants() 
         .Select(x => x.ToString()).ToList();
       }).FirstOrDefault(); 
    }

Aquí es la estructura del nodo:

<PlayerPofiles>
<Player>
  <Name>Stacey - Online</Name>
  <Type>Full/Basic</Type>
  <Active>True</Active>
  <Verified>True</Verified>
  <Password>pass</Password>
  <Email>[email protected].com</Email>
  <Sex>Female</Sex>
  <Avatar path="/images/Treasure/BroadSword.png" />
  <Ratio>
    <Win>0</Win>
    <Loss>0</Loss>
    <Abandoned>0</Abandoned>
  </Ratio>
  <Created>6/19/2011</Created>
  <Birthday>09/28/1989</Birthday>
  <Decks>
    <Base />
    <Booty />
  </Decks>
</Player>

  • puede usted proporcionar la estructura del nodo alrededor de las Cubiertas
InformationsquelleAutor Yecats | 2011-12-29

3 Kommentare

  1. 7

    Creo que debe ser la recuperación de una Lista de < cadena >, porque sólo la recuperación de los Descendientes daré un [IEnumerable para XElement]. (http://msdn.microsoft.com/en-us/library/bb337483.aspx) Pero lo que usted necesita es un IEnumerable de tipo string. Reemplazar «requiredname» con lo que usted necesita para llenar en la Lista:

    profiles.Elements("Decks").Descendants()
                  .Select(x => x.requiredname).ToList()
    • Cuando puedo añadir que la línea me sale un error en mi primer «Seleccionar», la frase: No se puede convertir implícitamente el tipo ‘System.Las colecciones.Genérica.IEnumerable<Munchkin.Modelo.PlayerProfiles.Perfil>’ a ‘Munchkin.Modelo.PlayerProfiles.Perfil’. Una conversión explícita existe (¿falta una pieza?) También estoy recibiendo un error de sintaxis en mi ; – diciendo que me falta una coma. Tengo: Cubiertas = perfiles.Elementos(«Mesa»).Descendientes() .Seleccione(x => x.Valor).ToList(); }).FirstOrDefault();
    • remueva el punto de colon en ToList();
    • El semii colon se corrigió. Gracias por la sugerencia! También, he actualizado mi post original con el código correcto. Para mi la estructura del nodo I x que sean necesarios.ToString() para sacar el valor.
  2. 2

    Quitar el «;» después de ToList()

    var profiles = xmlDoc.Element("PlayerPofiles").Elements("Player")
                         .where(profile =>(profile.Element("Active") == "True"))
                         .FirstOrDefault();
    
    if(profiles!=null){
    return new Profile
          {
           Name = (string)profiles.Element("Name"),
           Type = (string)profiles.Element("Type"),
           Verified = (string)profiles.Element("Verified"),
           Password = (string)profiles.Element("Password"),
           Email = (string)profiles.Element("Email"),
           Sex = (string)profiles.Element("Sex"),
           Avatar = (string)profiles.Element("Avatar").Attribute("path") ?? "",
           Created = (DateTime)profiles.Element("Created"),
           Birthday = (string)profiles.Element("Birthday") ?? "",
           Wins = (string)profiles.Element("Ratio").Element("Win") ?? "0",
           Losses = (string)profiles.Element("Ratio").Element("Loss") ?? "0",
           Abandoned = (string)profiles.Element("Ratio").Element("Abandoned"),
           //The following line removed the ;
           Decks = profiles.Elements("Decks").Descendants() 
             .Select(x => x.Value.ToString()).ToList()
           }); 
    }
    else
    {
    //Handle if null
    }
    • Ahh, Que se fija… gracias!
  3. 0

    Lo que me gustaría sugerir es que primero recuperar el registro de xml y, a continuación, hacer el mapeo, como los siguientes :-

    var currentProfile = from profiles in xmlDoc.Element("PlayerPofiles").Elements("Player")
                         where (string)profiles.Element("Active") == "True".FirstOrDefault()
                         select profile
    Profile profile = new Profile();
    profile.Name = currentProfile.Name;
    . //all your properties mapping
    .
    .
    return profile;

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea