我有以下LINQ查询,它针对SQL Server支持的存储库使用NHibernate。
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();
但是,它提示SQL Server无法按
CaseOwner.Name
列进行分组,因为它不包含在选择列表或组子句中。来自数据库世界,我理解该错误,但是,我不确定如何强制NHibernate按Id
和Name
进行分组,但是在我的Select中仍然可以使用CaseOwner
实体。 最佳答案
我终于找到答案了...
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;
这项工作有效,事实证明,我需要使用要分组的属性来投影一个新实体。