Я немного опоздал на ответ, но вы можете сделать это, если хотите, чтобы весь элемент, а не только значения, которые вы хотите сгруппировать:
var query = doc.Elements("whatever")
.GroupBy(element => new {
id = (int) element.Attribute("id"),
category = (int) element.Attribute("cat") })
.Select(e => e.First());
Это даст вы первый элемент, соответствующий вашей группе по выбору, так же, как второй пример Jon Skeets с использованием DistinctBy, но без реализации сравнения IEqualityComparer. DistinctBy, скорее всего, будет быстрее, но в приведенном выше решении будет меньше кода, если производительность не является проблемой.