Linq:具有分组、具有和最大的查询

mim*_*mic 5 linq group-by max

我正在尝试运行以下 MS SQL 查询:

 select PolicyCode, OccupancyCode, premiumcode, VersionNumber, rate
 from COVERAGE_RATES as cov
 group by PolicyCode, OccupancyCode, PremiumCode,VersionNumber, rate
 having (VersionNumber = 25 or VersionNumber = 
 (
     select MAX(versionnumber) from COVERAGE_RATES where
     PolicyCode = 4 and OccupancyCode=2 and PremiumCode = cov.PremiumCode
 ) ) and PolicyCode = 4
 AND OccupancyCode = 2
Run Code Online (Sandbox Code Playgroud)

这个想法是获取 VersionNumber 为 25 的记录,或者,如果组中没有这样的版本,则获取最大数量。也就是说,如果我们有表格:

policyCode Version ...
----------------------
1          2
1          10
2          1
2          25
2          26
Run Code Online (Sandbox Code Playgroud)

我们应该有以下结果:

policyCode Version ...
----------------------
1          10
2          25
Run Code Online (Sandbox Code Playgroud)

Linq 代码是:

var res = (from c in CoverageRate
                       group c by c.PolicyCode
                           into rateGroup
                           where rateGroup.Any(r => r.VersionNumber == versionNumber ||
                           r.VersionNumber == 
                           CoverageRate.Where(c2 => c2.OccupancyCode == occupancyCode && c2.PolicyCode == policyCode)
                               .Max(c2 => c2.VersionNumber))
                           select rateGroup);
Run Code Online (Sandbox Code Playgroud)

但我想我做错了什么,因为当我尝试使用 res.Count() 时出现以下错误:

无法创建类型为“..CoverageRate”的常量值。在此上下文中仅支持原始类型(“例如 Int32、String 和 Guid”)。

有人可以帮我解决这个查询吗?

Adu*_*cci 4

更新 - 我想你正在寻找这个:

var res =  from c in CoverageRate
           group c by c.PolicyCode into rateGroup
           select rateGroup.OrderByDescending(x => x.VersionNumber)
                           .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)