2012-01-29 10 views
11

Mam następujące kwerendy LINQ, który używa NHibernate przeciwko SQL Server kopii repozytorium ...NHibernate LINQ Group By nie trafia do grupy prawidłowo w 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(); 

jednak twierdzi, że SQL Server jest w stanie grupie przez kolumnę CaseOwner.Name, ponieważ nie jest ona zawarta w liście wyboru lub klauzuli grupy. Pochodzę ze świata baz danych Rozumiem ten błąd, ale nie jestem pewien, jak wymusić NHibernate na grupę zarówno przez Id i Name, ale wciąż mam encję CaseOwner dostępną dla mnie w moim Select.

Odpowiedz

6

Znalazłem odpowiedź końcu ...

 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; 

to działa ładnie ulokowane, okazuje się, że trzeba wystawać nowy podmiot o właściwościach chcę grupy dalej.