Linq:具有分组、having和Max的查询

Linq:具有分组、having和Max的查询,linq,group-by,max,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

我正在尝试运行以下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();

让我检查一下这个。谢谢不幸的是,我也有同样的错误(我知道问题在于max的部分。一旦我将其更改为某个数字,它就会工作。出于某种原因,linq不喜欢与max一起工作。@Seacat-您是否将linq用于实体或类似的东西?感谢更新,但我认为这是错的,因为我需要知道的不是整个max,而是每个组的。记录应该是be按policyCode分组,我需要找出每个组是否有版本为25的记录,或者,如果没有,则取每个组不同的最大值。是的,我使用实体链接。实际上是EF4.1,我在存储库中工作。谢谢回答,但结果是一样的。实际上,目标不是知道计数,而是让它工作。因为我通过call Count()所做的只是让Linq执行查询,看看它是否工作。但它没有:(
from c in CoverageRate
                       group c by c.PolicyCode
                           into g
                           select new
                        {
                            policyCode = g.Key,
                            Version = (from t2 in g select t2.VersionNumber).Max()
                        }