Вы предоставляете запрос, возвращающий последовательность в качестве значения атрибута. Я предполагаю, что вы ожидаете, что будет один результат, и в этом случае вам просто нужно изменить его на:
new XAttribute("pub_id", (from p in g select new { p.Pubs_id }).Single())
Или даже:
new XAttribute("pub_id", (from p in g select p.Pubs_id).Single())
Не совсем понятно, действительно ли это , что вы ожидаете, - но это проблема. LINQ to XML вызывает ToString
по вашему запросу, и вы видите результат этого. Измените второй аргумент конструктора на что-то, что дает единственное значение, однако вам нужно это сделать.
Я подозреваю, что вы обнаружите, что, если вы сделаете отступ в своем коде более четко, это сделает более очевидным, что происходит - в настоящий момент не совсем ясно, просто посмотреть на него. Я бы переписал ваш запрос, как указано в вопросе, как:
from b in bookResults
group b by b.Title1 into g
select new XElement("book",
new XAttribute("pub_id", from p in g select new { p.Pubs_id }),
new XElement("Title", g.Key),
from bk in g
select new XElement("Name", new XAttribute("au_id", bk.Au_id), bk.Name))
)