РЕДАКТИРОВАТЬ: Это было ясно написано давным-давно - в эти дни я определенно пошел бы с актерами согласно ответу Игоря.
Самый простой способ будет выглядеть примерно так:
var page = (from tabElement in extensionsDoc.Descendants("page")
let idAttribute = tabElement.Attribute("id")
where idAttribute != null
&& idAttribute.Value == tabId.ToString()
select tabElement).SingleOrDefault();
В качестве альтернативы вы можете написать метод расширения для XElement
:
public static string AttributeValueOrDefault(this XElement element,
string attributeName)
{
XAttribute attr = element.Attribute(attributeName);
return attr == null ? null : attr.Value;
}
затем используйте:
var page = (from element in extensionsDoc.Descendants("page")
where element.AttributeValueOrDefault("id") == tabId.ToString()
select element).SingleOrDefault();
Или использовать точечную запись:
var page = extensionsDoc.Descendants("page")
.Where(x => x.AttributeValueOrDefault("id") == tabId.ToString())
.SingleOrDefault();
(Было бы целесообразно вызывать tabId.ToString()
один раз заранее, кстати, а не для каждой итерации.)