2011-12-14 25 views
3

我試圖運行下面的MS SQL查詢:的Linq:與分組查詢,有和最大

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()我有以下錯誤:

無法創建一個常量值爲typ e'..CoverageRate'。在此上下文中僅支持基本類型(如Int32,String和Guid)。

有人可以幫我看看這個查詢嗎?

回答

3

更新 - 我認爲你正在尋找這樣的:

var res = from c in CoverageRate 
      group c by c.PolicyCode into rateGroup 
      select rateGroup.OrderByDescending(x => x.VersionNumber) 
          .FirstOrDefault(); 
+0

讓我看看這一個。謝謝! – mimic 2011-12-14 18:43:58

+0

不幸的是我有同樣的錯誤。 :(我知道問題是最大的一部分,只要我將它改爲某個數字,它就起作用了。出於某種原因,linq不喜歡使用max。 – mimic 2011-12-14 18:48:52

1
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() 
         }