2012-05-01 19 views
6

Ho la seguente query in SQL che vorrei convertire in LINQ:Sql a Linq difficoltà - gruppo da, avendo

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 

Sto avendo una difficoltà come scrivere l'ultima riga della mia domanda di sql in linq. Quello che segue è il mio lavoro finora:

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

Credo che possa problema principale è che molti convertire una dichiarazione di sql avere in una in cui dichiarazione LINQ, ma nel mio caso io non credo che sia possibile scrivere un altro dove dopo il gruppo di linq statement!

Aggiornamento:

La situazione: Ho un certo numero di figli, ognuno dei quali ha molti diversi profili, (alcuni possono essere lo stesso). Un utente selezionerà un numero di bambini, da cui vorrei ricavare i loro profili comuni. Cioè, se il profilo X viene trovato per OGNI bambino, lo otterrò, se il profilo Y è trovato per ogni bambino tranne uno, allora sarebbe invalido!

+0

Ora sto iniziando a pensare che devo usare una query NIDIFICATO! – test

risposta

9

Sembra che si desidera una clausola where qui ...

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

grazie amico mio, pensavo di non poterne scrivere un altro dove :) – test

+0

Un piccolo problema che sto avendo è che "pcr" non esiste nel contesto attuale! – test

+0

ok ho appena visto il tuo aggiornamento! fammi provare e lavorarci :) – test