Полагаю, вы получаете общий тип List вместо значения элемента. Это происходит потому, что Eval возвращает результат ToString (), а ToString () в List возвращает тип. Есть несколько вещей, которые вы можете сделать. Один является вложенным другим репитером и привязывает его к свойству событий. Это самое чистое теоретическое решение, хотя в этом случае я сомневаюсь, что оно того стоит.
Еще одна вещь, которую вы можете сделать, это накапливать свойство events в виде строки. это можно сделать так:
var qListCurrentMonth =
(from feed in doc.Descendants("item")
select new
{
title = feed.Element("title").Value,
description = feed.Element("description").Value,
events =
(from ev in feed.Element("events").Elements("location")
select ev.Attribute("city").Value).Aggregate((x,y) => x+ "<br />" + y)
});
Метод Aggregate будет накапливать коллекцию в одном экземпляре. Если у вас в среднем более 5 событий на строку, вам лучше использовать StringBuilder в качестве аккумулятора (имеется перегрузка Aggregate) по соображениям производительности (я уверен, что вы знаете о строке против StringBuilder и производительности).
Поскольку вы используете .NET 3.5, я бы посоветовал использовать ListView вместо Repeater ... как всегда. Также в этом случае GridView может быть лучше, поскольку вы представляете таблицу.
Наконец - следуйте соглашению .NET и используйте PascalCase для имен свойств (т.е. события вместо событий)