Я не могу придумать простой способ сделать это с помощью LINQ to SQL.
Конечно, простым способом (если вы можете себе это позволить) было бы привести все строки ввернуться к клиенту, а затем выполнить запрос с помощью LINQ to Objects.
var query = myDataContext
.MyTable
.AsEnumerable()
.SelectMany(row => row.Locations.Split(','))
.GroupBy(location => location)
.Select(group => new { Location = group.Key, Count = group.Count() });
Если вы хотите использовать вместо последовательности строк в этом формате, замените последнюю строку на:
.Select(group => string.Format("{0} ({1})", group.Key, group.Count());
С другой стороны, я бы настоятельно рекомендовал бы нормализовать схему вашей базы данных.Не стоит хранить списки с разделителями в столбце.