Bueno, los Usuarios elementos no tienen atributos GUID. Dos opciones sugeridas:
- Mira
XDocument.Root.Elements("User")
- Uso
Descendants("User")
para encontrar todos los elementos de usuario.
Me quedaré con el primero por el momento. Eso nos da:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (string) el.Attribute("GUID") == userGUID.ToString()
select el);
Ahora, aún podemos arreglar esto más. En primer lugar, vamos a echado a Guid
en lugar de string
:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (Guid) el.Attribute("GUID") == userGUID
select el);
Sin embargo no hay mucha razón para usar una expresión de consulta aquí ... todo lo que está solicitando es un predicado. Vamos a usar el método Where
directamente:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);
Cómo pones a cabo depende de usted, por supuesto :) Con una línea más larga, es probable que pueda alinear todo en el marco de una larga primera línea:
IEnumerable<XElement> users = XMLDoc.Root
. etc
Ahora, finalmente, ¿qué pasa si el elemento de usuario no tiene un atributo de GUID? Actualmente, este código lanzará una excepción. Eso puede ser exactamente lo que quiere, o puede que no. Si no es así, puede que sea ignorar tales cosas por colada a Nullable<Guid>
aka Guid?
lugar:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid?) el.Attribute("GUID") == userGUID);
Gracias, esto fue en parte lo que necesitaba, un error estúpido de mí. – Nacho
Como Jon señala a continuación, seleccionar el tipo correcto es una mejor opción. Además, si usa "el.Attribute (" GUID "). Value" obtendrá automáticamente una cadena como el tipo de devolución y no hay necesidad de lanzar. –
'root' debe ser' Root' en 'XMLDoc.root.Elements (" User ")'. – Appulus