2012-01-29 10 views
11

Ho la seguente query LINQ che utilizza NHibernate contro un repository sostenuto SQL Server ...NHibernate Linq Raggruppa per gruppo non riesce a correttamente in 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(); 

Tuttavia, si lamenta che SQL Server è in grado di gruppo dalla colonna CaseOwner.Name perché non è contenuta nell'elenco di selezione o nella clausola di gruppo. Provenendo da un mondo di database, capisco quell'errore, tuttavia, non sono sicuro di come forzare NHibernate a raggruppare sia da Id sia da Name ma ho ancora l'entità CaseOwner a mia disposizione nel mio Seleziona.

risposta

6

ho trovato la risposta 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; 

Questo funziona ben segnalato, si scopre che ho bisogno di progettare una nuova entità con le proprietà che voglio gruppo su.