2012-05-01 9 views
6

tengo la siguiente consulta en SQL que me gustaría convertir a LINQ:SQL para LINQ dificultad - grupo por, tener

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 

estoy teniendo una dificultad la forma de escribir la última línea en mi consulta SQL en linq. Lo que sigue es mi trabajo hasta ahora:

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

Creo que puede principal problema es que muchos convertir una instrucción SQL que tiene en un comunicado, donde LINQ, pero en mi caso no creo que es posible escribir otra donde ¡después del grupo por la declaración de linq!

Actualización:

La situación: Tengo un número de hijos, cada uno de los cuales tiene muchos perfiles diferentes, (algunos pueden ser los mismos). Un usuario seleccionará un número de hijos, del cual me gustaría derivar sus perfiles comunes. Es decir, si el perfil X se encuentra para CADA niño, entonces lo obtendré, si el perfil Y se encuentra para cada niño, excepto uno, ¡de lo contrario no sería válido!

+0

ahora estoy empezando a pensar que tengo que usar una consulta anidada! – test

Respuesta

9

suena como usted quiere una cláusula where aquí ...

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

gracias amigo mío, pensé que no podría escribir en otro lugar :) – test

+0

¡Un pequeño problema que estoy teniendo es que 'pcr' no existe en el contexto actual! – test

+0

¡Ok, acabo de ver su actualización! déjame intentarlo y trabajar en él :) – test