2012-06-21 30 views
5

Tôi có hai bảng ServiceProvider. Giữa chúng là một bảng tham gia ServiceProvider chỉ có 2 trường - một cho mỗi một trong hai PK. Khi được thêm vào edmx, bảng nhiều người tham gia được trừu tượng hóa và không thể nhìn thấy (như mong đợi).Nhiều người chọn nhiều trong LINQ to Entities

Điều này là tất cả ngoại trừ khi tôi muốn nhận Nhà cung cấp dựa trên một dịch vụ nhất định. Từ này question:

có vẻ như câu trả lời sẽ là đơn giản:

var query = from p in entities.Providers 
      from s in entities.Services 
      where s.Id == 15 
      select p; 

nhưng điều này trả về tất cả các nhà cung cấp. Tôi làm gì sai ở đây?

+0

Liệu 's' không có một' tài sản Providers' bạn có thể sử dụng không? – Rawling

+0

Có s.Providers là tập hợp các Nhà cung cấp, nhưng tôi cũng không thể làm việc đó như một phần của lựa chọn. – finoutlook

+0

@abatishchev - cảm ơn bạn đã chỉnh sửa nhưng sẽ không thay đổi tiêu đề khiến câu hỏi khó tìm hơn nếu ai đó tìm kiếm khung thực thể nhiều người? (Tôi nhận ra EF của nó được xác định bởi thẻ, nhưng sẽ tìm kiếm trên đó) – finoutlook

Trả lời

4
var query = entities.Providers.FirstOrDefault(p => p.Id == 15).Services.ToList(); 
+0

Tôi nghĩ bạn đã có 'Nhà cung cấp' và' Dịch vụ 'sai cách. – Rawling

+0

Vâng, đó là nhà cung cấp tôi đã cố gắng để sản xuất, nhưng tôi thấy đối xứng của nó anyway – finoutlook

+0

Vâng, tôi đoán nguyên tắc hoạt động cả hai cách. – Rawling

-1

Bạn có thể thử sử dụng join, như vậy:

entity.Providers.Join(entity.Services, c => c.ID, p => p.ID,(c, p) => new { Providers= c, Services= p }) 
+0

Tại sao ID nhà cung cấp phải bằng ID dịch vụ? Tại sao bạn chọn cặp {Nhà cung cấp dịch vụ} khi vây chỉ muốn danh sách nhà cung cấp? – Rawling

+0

chỉ đề xuất cho anh ta một cách mà anh ta có thể hiểu được. Anh ta có thể thiết lập sau và loại bỏ những gì anh ta không cần – Boomer

+0

Vì vậy, anh ta có thể loại bỏ câu lệnh 'Join'? – Rawling

2

Hãy thử điều này:

var res = from s in entities.Services 
      where s.Id == 15 
      select s.Provider; 

EDIT

Corrected và thử nghiệm các truy vấn trên mô hình thực tế cuộc sống và dữ liệu. Nó hoạt dộng bây giờ.

+0

Điều đó sẽ không có tác dụng trong nhiều mối quan hệ vì các loại bộ sưu tập thường không có thuộc tính 'Id'. – Nuffin

+0

Đã sửa câu trả lời. –

2

Không phải là nó đơn giản như

var matchingProviders = entities.Services.Single(s=>s.Id==15).Providers; 
+0

Tính năng này hoạt động. Tôi vẫn còn bối rối tại sao các câu hỏi khác tôi đã đề cập đã upvotes - và bài đăng này có cùng một 'đôi từ' gợi ý: http://smehrozalam.wordpress.com/2010/06/29/entity-framework-queries-involving- nhiều-nhiều-mối quan hệ-bảng/ – finoutlook

+0

@Downvoter: Chăm sóc bình luận? – Rawling

+0

@finoutlook Tôi không phải rất quen thuộc với khung thực thể, nhưng nếu điều này làm việc - và nó dường như không quá khó khăn cho nó để làm việc - sau đó nó hoạt động :) – Rawling

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