2012-01-29 34 views
11

Tôi có truy vấn LINQ sau đó sử dụng NHibernate chống lại một SQL Server kho hậu thuẫn ...NHibernate LINQ Nhóm Bằng thất bại trong việc nhóm đúng trong 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(); 

Tuy nhiên, nó than phiền rằng SQL Server là không có khả năng nhóm bởi cột CaseOwner.Name vì nó không có trong danh sách lựa chọn hoặc mệnh đề nhóm. Đến từ một thế giới cơ sở dữ liệu tôi hiểu rằng lỗi, tuy nhiên, tôi không chắc chắn làm thế nào để buộc NHibernate để nhóm của cả hai IdName nhưng vẫn có thực thể CaseOwner có sẵn cho tôi trong Chọn của tôi.

Trả lời

6

Tôi tìm thấy câu trả lời cuối cùng ...

 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; 

này hoạt động nicley, nó quay ra tôi cần phải dự một thực thể mới với các thuộc tính tôi muốn nhóm trên.