Конечно, что-то вроде:
private string GetValue(XElement element, string language, string key)
{
return element.Elements("itemInfo")
.Where(x => (string) x.Attribute("lang") == language)
.Where(x => (string) x.Attribute("key") == key)
.Select(x => (string) x.Element("info"))
.FirstOrDefault();
}
...
string title = GetValue(item, "en", "title");
string longDescription = GetValue(item, "en", "longDescription");
string shortDescription = GetValue(item, "en", "shortDescription");
Если у вас уже есть соответствующий элемент item, я не думаю, что вам действительно нужно выражение запроса; если вы запрашиваете несколько элементов, вы можете. Например:
var query = from item in doc.Descendants("item")
select new {
Title = GetValue(item, "en", "title"),
LongDescription = GetValue(item, "en", "longDescription"),
ShortDescription = GetValue(item, "en", "shortDescription");
};
Или в форме выражения без запроса:
var query = doc.Descendants("item")
.Select(item => new {
Title = GetValue(item, "en", "title"),
LongDescription = GetValue(item, "en", "longDescription"),
ShortDescription = GetValue(item, "en", "shortDescription");
};