Вы можете использовать ToDictionary для создания словаря из последовательности LINQ.
Первая часть - это ключ, а вторая - значение, например,
.Select(country => new SitiesViewByUser()
{
Country = country.Country,
City = country.Cities.ToDictionary(c => c, c => c);
});
Это предполагает, что City
на SitiesViewByUser
определяется как Dictionary<string, string>
Хотя ваш LINQ довольно запутанный.Вы создаете анонимный тип, предположительно для формирования Country
, но с атрибутом Country
, который влияет на Title
страны (это название страны?).
У вас также есть коллекция только города Titles
, поэтому я не уверен, какое значение вы собираетесь использовать в словаре City
для типа SitiesViewByUser
.
Кроме того, что такое Сити?: \
Обновление
Вы можете сделать что-то вроде этого:
var countries = (from country in db.Countries
select new
{
Title = country.Title,
CityIds = country.Cities.Select(c => c.Id),
CityTitles = country.Cities.Select(c => c.Title)
}).AsEnumerable();
// You have a collection of anonymous types at this point,
// each type representing a country
// You could use a foreach loop to generate a collection
// of SitiesViewByUser, or you could use LINQ:
var sitiesViewByUsers = countries.Select(c => new SitiesViewByUser
{
Country = c.Title,
City = c.CityIds.Zip(c.CityTitles, (k, v) => new { Key = k, Value = v })
.ToDictionary(x => x.Key, x => x.Value)
};
В качестве альтернативы, почему бы вам не изменить тип SitiesViewByUser
быть:
public class SitiesViewByUser
{
public string Country { get; set; }
public IEnumerable<City> Cities { get; set; }
}
Тогда вы можете сделать (используя свободный синтаксис):
var sitiesViewByUsers = db.Countries.Select(c => new SitiesViewByUser
{
Country = c.Title,
Cities = c.Cities
});