我正在尝试运行以下 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
这个想法是获取 VersionNumber 为 25 的记录,或者,如果组中没有这样的版本,则获取最大数量。也就是说,如果我们有表格:
policyCode Version ...
----------------------
1          2
1          10
2          1
2          25
2          26
我们应该有以下结果:
policyCode Version ...
----------------------
1          10
2          25
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);
但我想我做错了什么,因为当我尝试使用 res.Count() 时出现以下错误:
无法创建类型为“..CoverageRate”的常量值。在此上下文中仅支持原始类型(“例如 Int32、String 和 Guid”)。
有人可以帮我解决这个查询吗?
更新 - 我想你正在寻找这个:
var res =  from c in CoverageRate
           group c by c.PolicyCode into rateGroup
           select rateGroup.OrderByDescending(x => x.VersionNumber)
                           .FirstOrDefault();