2011-05-27 13 views
6

tengo una tabla llamada CLASE con los camposCómo LINQ Distinto por múltiples campos sin tipos anónimos

**{BATCH, DEGREE, DEPT, SEM, SECTION, GROUP }** 

que tiene los siguientes registros

RECORD1: {2009, BE, CSE, 3Sem, ASec, 1Grupo}

Registro2: {2009, BE, CSE, 3Sem, ASEC, 2Grupo}

RECORD3: {2009, BE, ECE, 4Sem, ASEC, 1Group}

RECORD4: {2009, BE, ECE, 4Sem, ASEC, 2Grupo}

necesito seleccionar registros distintos ignorando el GRUPO y considerando únicamente el siguiente

{BATCH, grado, DTO, SEM, SECCIÓN}

por lo que debe devolverme los siguientes 2 registros distintos

    Record1: **{ 2009 , B.E , CSE , 3Sem , ASec , 1Group }** 

Dis tinctRecord: 1 ------------------------ (OR) **

    Record2: **{ 2009 , B.E , CSE , 3Sem , ASec , 2Group }** 

----- (AND)

    Record3: **{ 2009 , B.E , ECE , 4Sem , ASec , 1Group }** 

DistinctRecord: 2 ------------------------ (OR)

    Record4: **{ 2009 , B.E , ECE , 4Sem , ASec , 2Group }** 

Ahora estoy usando la siguiente consulta LINQ

public static object GetDistictClasses(IQueryable<Class> AllClasses) 
    { 
     return (from c in AllClasses 
       group c by new { c.Batch, c.Degree_ID, c.Specialization_ID, c.CurrentSemester, c.Section_ID } into grp 
       select new 
       { 
        grp.Key.Batch, 
        grp.Key.Degree_ID, 
        grp.Key.Specialization_ID, 
        grp.Key.CurrentSemester, 
        grp.Key.Section_ID 
       }).Distinct(); 
    } 

Pero me devuelve una Tipo Ananymous, pero necesito el real Tipo Clase

Podría alguien ayudarme ... gracias ..

Regrads Pradeep

+0

Debería devolver un 'IQueryable ' (suponiendo que la forma en que lo inicializó es legal para el tipo). Los únicos objetos anónimos aquí son tus llaves. p.s., la llamada final a 'Distinct()' no es necesaria ya que la agrupación debería haberse ocupado de eso. –

Respuesta

21

Usted puede hacer lo siguiente:

return 
    from c in AllClasses 
    group c by new 
    { 
     c.Batch, 
     c.Degree_ID, 
     c.Specialization_ID, 
     c.CurrentSemester, 
     c.Section_ID 
    } into grp 
    select grp.First(); 

Esto toma cada primer Class del grupo dado, por lo tanto devuelve un objeto de entidad en lugar de un tipo anónimo.

+4

Gracias u ......... Muchas gracias ..... Eres increíble ... – Pradeep

+10

Lo sé ... es un regalo :-P – Steven

+0

Leyenda. ¡Esto me ha salvado por completo! Muchas gracias. – MartynJones87

12

deja para hacer que sea sencillo - distinto se realiza en dos propiedades:

  • el ID del usuario y
  • el ID de grupo

también este devolverá el mismo tipo de objeto.

var distinctgroupSubscriptions = groupSubscriptions.GroupBy(item => new { item.User.Id, item.Group.GroupId }).Select(group => group.First()).ToList(); 
+0

funcionó bien .... – Zeeshan

+0

es una publicación muy antigua, pero esto es increíble linq –

+0

es bastante vieja respuesta, pero este comentario es sorprendente – markokstate