2011-09-30 22 views
7

我很困惑如何该查询更改为LINQ如何在LINQ中使用分区?

select 
    CONTENT 
    from 
    ( 
     select 
      CONTENT, 
      CAM_ID, 
      max(CAM_ID) over (partition by DOCUMENT_ID) MAX_ID 
     from  
      T_CAM_REVISION 
     where 
      DOCUMENT_ID = '101' 
    ) 
    where  
    CAM_ID = MAX_ID 

这样我就可以得到一个单一的内容价值。

回答

2

在LINQ中没有办法做max(...) over (...)。下面是一个等效查询:

var maxCamID = 
    context.T_CAM_REVISION 
    .Where(rev => rev.DOCUMENT_ID == "101") 
    .Max(rev => rev.CAM_ID); 

var query = 
    from rev in context.T_CAM_REVISION 
    where rev.CAM_ID == maxCamID 
    where rev.DOCUMENT_ID == "101" 
    select rev.CONTENT; 

如果你只想要一个结果:

var result = 
    context.T_CAM_REVISION 
    .First(rev => rev.CAM_ID == maxCamID 
       && rev.DOCUMENT_ID == "101") 
    .CONTENT;