2009-02-06 46 views
9

Tôi có một bộ sưu tập các đối tượng được gọi là Gigs.Truy vấn Bộ sưu tập Trẻ em trong LINQ

Mỗi Gig có bộ sưu tập Acts.

Sử dụng LINQ Tôi muốn truy vấn bộ sưu tập các hợp đồng biểu diễn của mình để có được tất cả các hợp đồng biểu diễn có hành vi có id là 7 chẳng hạn.

act.id = 7; 

Vì vậy, tôi bắt đầu ghi chép lại ...

return from gig in qry 
     where gig.Acts //not sure how to do this bit 
     select gig; 

Nhưng tôi không chắc chắn làm thế nào bạn thiết lập điều kiện về bộ sưu tập con được gọi là hành vi.

Bất kỳ ý tưởng nào?

Trả lời

7
var x = gigs.Where(g=>g.Acts.Select(a=>a.ID).Contains(7)); 

hai truy vấn này cũng trở lại như cũ:

var x = gigs.Where(g=>g.Acts.Count(a=>a.ID == 7) > 0); 

var x = gigs.Where(g=>g.Acts.FirstOrDefault(a=>a.ID == 7) != null); 
+0

LINQ thực sự là, kỳ lạ kể từ khi có một vài cách để viết cùng một truy vấn. –

+0

Vì vậy, yêu cầu đầy đủ là .... var x = gigs.Where (g => g.Acts.Select (a => a.Artist.ID) .Contains (7)); Nếu Nghệ sĩ là không hợp lệ (hoàn toàn hợp lệ), tôi nhận được ngoại lệ ... 'Được chia sẻ.DO.Artist Artist' of 'Shared.DO.Act' không hợp pháp về loại 'System.Collections.Generic.List' 1 [Shared.DO.Act] Suy nghĩ của Hmmm? – iasksillyquestions

+0

Chỉ cần sửa đổi nó quá nhìn vào các nghệ sĩ đầu tiên, trước khi kiểm tra ID: var x = gigs.Where (g => g.Acts.Select (a => a.Artist) .Select (b => b.ID) .Contains (7)); hoặc –

11

Về cơ bản giống như Mike_G, chỉ có cú pháp chi tiết và sử dụng bình đẳng.

var myCollection = from gig in qry 
        where gig.Acts.Any(act => act.ID == 7) 
        select gig; 

Chỉ cần một chỉnh sửa để mang lại bình luận cho câu trả lời:

Trên thực tế truy vấn là một ID trên một thành viên (Artist) trên đối tượng Đạo luật có thể được null.

Query mới:

var myCollection = from gig in qry 
        where gig.Acts.Any(act => (null != act.Artist) && (act.Artist.ID == 7)) 
        select gig; 
+0

Bạn thực sự là một chút kể từ khi Công vụ là một bộ sưu tập chính nó, mà không có một tài sản của ID. –

+0

vâng tôi nhận ra rằng sau khi tôi viết nó .. Derp, vừa chỉnh sửa. –

+0

Tôi hoàn toàn quên về Bất kỳ! Tôi tự hỏi trong số tất cả các truy vấn được liệt kê, đó là nhanh nhất. –

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