Что ж, элементы Users не имеют атрибутов GUID. Два предложенных варианта:
- Посмотрите на
XDocument.Root.Elements("User")
- Используйте
Descendants("User")
, чтобы найти все Пользовательские элементы.
Я буду придерживаться первого на данный момент. Это дает нам:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (string) el.Attribute("GUID") == userGUID.ToString()
select el);
Теперь мы все еще можем привести это в порядок. Во-первых, давайте приведем к Guid
вместо string
:
IEnumerable<XElement> users =
(from el in XMLDoc.Root.Elements("User")
where (Guid) el.Attribute("GUID") == userGUID
select el);
Однако здесь не так много причин использовать выражение запроса ... все, что вы применяете - это один предикат. Давайте просто воспользуемся методом Where
напрямую:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid) el.Attribute("GUID") == userGUID);
Разумеется, то, как вы это изложите, зависит от вас :) С помощью более длинной строки вы можете выровнять все по более длинной первой строке:
IEnumerable<XElement> users = XMLDoc.Root
. etc
Теперь, наконец, что, если элемент User не имеет атрибута GUID? В настоящее время этот код будет выдавать исключение. Это может быть именно то, что вы хотите, а может и нет. Если это не так, вы можете игнорировать такие вещи, передав Nullable<Guid>
aka Guid?
вместо:
IEnumerable<XElement> users =
XMLDoc.Root
.Elements("User")
.Where(el => (Guid?) el.Attribute("GUID") == userGUID);