2012-05-01 20 views
6

ben LINQ dönüştürmek istiyoruz SQL aşağıdaki sorgu var:Sql - grup, sahip

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 

nasıl benim sql sorgusunda son satırı yazmak için zorluk yaşıyorum linq içine. O may asıl sorun birçok yerde linq deyimi içine sahip sql deyimi dönüştürmek olduğunu düşünüyorum, ama benim durumumda ben başka bir yerde yazmak mümkün olduğunu düşünmüyorum

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

: Aşağıdaki şimdiye kadar benim işim linq ifadesine göre gruptan sonra!

Güncelleme:

durum: Birçok farklı profilleri vardır, her biri çocukların bir dizi var, (bazı aynı olabilir). Bir kullanıcı, ortak profillerini türetmek istediğim bir dizi çocuk seçecektir. Yani, eğer X çocuğu, EVERY çocuğu için bulunursa, onu elde edeceğinden, Y dışında bir çocuk için profil Y bulunduğunda, bu geçersiz olurdu! Burada bir where maddesini istedikleri gibi

+0

... Sesler! – test

cevap

9

Ben şimdi bir NESTED sorgu kullanmak zorunda olduğunu düşünmeye başladım

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

Teşekkürler arkadaşım, başka bir yere yazamayacağımı düşündüm :) – test

+0

Yaşadığım küçük bir sorun şu anda 'pcr' mevcut bağlamda mevcut değil! – test

+0

tamam sadece güncellemenizi gördü! çalışmama izin ver :) – test