2012-05-01 35 views
6

Tôi có câu hỏi sau trong SQL mà tôi muốn chuyển đổi sang LINQ:Sql để LINQ khó khăn - nhóm bằng, có

select profile_id from t 
where child_id in (1, 2 ,3, ...) //this will be a list of integers CHILDREN 
group by profile_id 
having count(distinct child_id) = 3 

Tôi gặp một khó khăn như thế nào để viết dòng cuối cùng trong truy vấn sql của tôi vào linq. Sau đây là công việc của tôi cho đến nay:

public IQueryable<ProfileChildRelationship> GetPCRelByCids(List<int> children) 
    { 
     var query = from pcr in this._entities.ProfileChildRelationships 
        where children.Contains(pcr.pcChildIDF) 
        group pcr by pcr.pcProfileIDF into g 
        ??? having ...? 
        select pcr; 

     return query; 
    } 

Tôi nghĩ rằng vấn đề chính có thể là nhiều chuyển đổi một tuyên bố có sql vào một nơi tuyên bố LINQ, nhưng trong trường hợp của tôi, tôi không nghĩ rằng nó có thể viết thư nơi khác sau nhóm bằng câu lệnh linq!

Cập nhật:

Tình hình: Tôi có một số trẻ em, mỗi trong số đó có nhiều cấu hình khác nhau, (một số có thể giống nhau). Một người dùng sẽ chọn một số trẻ em, từ đó tôi muốn lấy được các cấu hình chung của chúng. Đó là, nếu cấu hình X được tìm thấy cho MỌI trẻ em, hơn tôi sẽ nhận được nó, nếu hồ sơ Y được tìm thấy cho mỗi đứa trẻ ngoại trừ một, hơn nó sẽ là không hợp lệ!

+0

Tôi bây giờ bắt đầu nghĩ rằng tôi phải sử dụng một truy vấn lồng nhau! – test

Trả lời

9

Âm thanh như bạn muốn có một where khoản ở đây ...

var query = from pcr in this._entities.ProfileChildRelationships 
      where children.Contains(pcr.pcChildIDF) 
      group pcr by pcr.pcProfileIDF into g 
      where g.Select(x => x.ChildId).Distinct().Count() == 3 
      select g.Key; // This is the profile ID 
+0

cảm ơn bạn của tôi, tôi nghĩ rằng tôi không thể viết một nơi khác :) – test

+0

Một vấn đề nhỏ mà tôi đang gặp là 'pcr' không tồn tại trong ngữ cảnh hiện tại! – test

+0

ok vừa xem cập nhật của bạn! Hãy để tôi thử và làm việc trên nó :) – test

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