2012-01-29 11 views
11

Tengo la siguiente consulta LINQ que utiliza NHibernate contra un repositorio de respaldo de SQL Server ...NHibernate LINQ grupo por grupo no correctamente en SQL Server

var casesByCaseOwner = this.preGrantDetailRepository.All 
    .Where(x => x.CaseFileLocation.Id == cflId) 
    .GroupBy(x => x.CaseOwner) 
    .Select(x => new StagSummaryForCfItem 
    { 
     Id = x.Key.Id, 
     Description = x.Key.Name, 
     NumberOfCases = x.Count(), 
     UninvoicedNetFee = x.Sum(y => y.UninvoicedNetFee), 
     UninvoicedDisbursement = x.Sum(y => y.UninvoicedDisbursement) 
    }).AsEnumerable(); 

Sin embargo, se queja de que SQL Server es incapaz de grupo por la columna CaseOwner.Name porque no está incluida en la lista de selección o cláusula de grupo. Viniendo de un mundo de base de datos entiendo ese error, sin embargo, no estoy seguro de cómo forzar a NHibernate a agrupar por Id y Name, pero todavía tengo la entidad CaseOwner disponible para mí en mi Seleccionar.

Respuesta

6

he encontrado la respuesta finalmente ...

 var casesByCaseOwner = this.preGrantDetailRepository.All 
    .Where(x => x.CaseFileLocation.Id == cflId) 
    .GroupBy(x => new { x.CaseOwner.Id, x.CaseOwner.Name }) 
    .Select(x => new StagSummaryForCfItem 
    { 
     Id = x.Key.Id, 
     Description = x.Key.Name, 
     NumberOfCases = x.Count(), 
     UninvoicedNetFee = x.Sum(y => y.UninvoicedNetFee), 
     UninvoicedDisbursement = x.Sum(y => y.UninvoicedDisbursement) 
    }).AsEnumerable(); 

    return casesByCaseOwner; 

Esto funciona nicley, resulta que necesito para proyectar una nueva entidad con las propiedades que desea agrupar.