2012-02-26 27 views
7

tiếp tục vấn đề How get array in linq to entity?Nhận từ điển <int, string> từ LINQ đến thực thể?

nhưng bây giờ không phải là mảng => điển thành phố loại là điển

var sites = (from country in db.Countries 
         select new 
         { 
          Country = country.Title, 
          Cities = country.Cities.Select(m => m.Title) 
         }) 
         .AsEnumerable() 
         .Select(country => new SitiesViewByUser() 
         { 
          Country = country.Country, 
          City = country.Cities.ToArray() 
         }); 

update:

public class SitiesViewByUser 
    { 
     public string Country { get; set; } 
     public Dictionary<int, string> City { get; set; } 
    } 
+0

Định nghĩa của thuộc tính Thành phố trên SitiesViewByUser là gì? – devdigital

+0

Tôi cập nhật bài đăng của mình – Mediator

+0

Khóa int của từ điển đến từ đâu? Đây có phải là khóa chính của thành phố không? Bạn không truy xuất điều này trong truy vấn LINQ to Entities ban đầu của mình. – devdigital

Trả lời

9

Bạn có thể sử dụng ToDictionary để tạo ra một từ điển từ một Trình tự LINQ.

Phần đầu tiên là khóa và giá trị thứ hai, ví dụ:

.Select(country => new SitiesViewByUser() 
{ 
    Country = country.Country, 
    City = country.Cities.ToDictionary(c => c, c => c); 
}); 

này giả định rằng City trên SitiesViewByUser được định nghĩa là Dictionary<string, string>

LINQ của bạn là khá khó hiểu mặc dù. Bạn đang tạo một loại ẩn danh, được giả định để định hình một Country, nhưng có thuộc tính Country trên đó, là nguyên nhân của Title của quốc gia (đó là tên của quốc gia?).

Bạn cũng có một bộ sưu tập chỉ là thành phố Titles, vì vậy tôi không chắc chắn bạn sẽ sử dụng giá trị nào trong từ điển City trên loại SitiesViewByUser của mình.

Ngoài ra, Sitie là gì? : \

Cập nhật

Bạn có thể làm một cái gì đó như thế này:

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) 
    }; 

Ngoài ra, tại sao bạn không thay đổi kiểu SitiesViewByUser là:

public class SitiesViewByUser 
{ 
    public string Country { get; set; } 
    public IEnumerable<City> Cities { get; set; } 
} 

Sau đó, bạn có thể làm (sử dụng cú pháp thông thạo):

var sitiesViewByUsers = db.Countries.Select(c => new SitiesViewByUser 
    { 
    Country = c.Title, 
    Cities = c.Cities 
    }); 
+0

Tôi cập nhật bài đăng của mình – Mediator

Các vấn đề liên quan