Если в вашей коллекции специальных атрибутов у вас не будет атрибутов с тем же идентификатором и что ваш класс "SpecialAttribute" имеет ссылку на родительский объект, это может сработать:
q.SelectMany(x => x.SpecialAttributes)
.Where(x => x.Attribute.Id == id)
.OrderBy(x => Convert.ToDateTime(x.AttribValue))
.Select( x => x.Parent )
.Distinct();
Я не знаю, будет ли EF анализировать Convert.ToDateTime () для правильного выражения t-sql. Если нет, вы можете сделать это в памяти (если коллекция не велика):
q.SelectMany(x => x.SpecialAttributes)
.Where(x => x.Attribute.Id == id)
.Select( x => new { Parent = x.Parent, Value = x.AttribVale} )
.Distinct()
.OrderBy(x => Convert.ToDateTime(x.Value))
.Select(x => x.Parent);