2011-09-30 14 views
7

Jestem mylić o tym, jak zmienić to zapytanie do LINQJak mogę użyć over według partycji w 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 

więc mogę uzyskać pojedynczą wartość treści.

Odpowiedz

2

Nie ma sposobu, aby wykonać max(...) over (...) w LINQ. Tutaj jest równoważne zapytania:

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; 

Jeśli chcesz tylko jeden wynik:

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