Это то, что вы искали?
Это группирует все дочерние отделы, у которых нет лаборатории, под родительскими отделами, где есть лаборатория.
var query = from dept in doc.Descendants("Department")
where (int)dept.Attribute("hasLab") == 0
&& dept.Parent.Name == "Department" // probably not needed
&& (int)dept.Parent.Attribute("hasLab") == 1
group dept by dept.Parent;
Или альтернативазапрос, вероятно, более эффективный:
var query = from dept in doc.Descendants("Department")
where (int)dept.Attribute("hasLab") == 1
from sub in dept.Elements("Department")
where (int)sub.Attribute("hasLab") == 0
group sub by dept;
Хотя я бы предпочел не создавать группировку (определенно более эффективную):
var query = from dept in doc.Descendants("Department")
where (int)dept.Attribute("hasLab") == 1
select new
{
Parent = dept,
Children = dept.Elements("Department")
.Where(sub => (int)sub.Attribute("hasLab") == 0),
};