我正在尝试运行以下 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”)。
有人可以帮我解决这个查询吗?
更新 - 我想你正在寻找这个:
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)