2012-03-11 34 views
1

我現在有這個LINQ聲明:LINQ凡在MAX

from s in SubContentRevisions 
where s.SubContentID.Equals("e3f319f1-65cc-4799-b84d-309941dbc1da") 
&& s.RevisionNumber == (SubContentRevisions.Max(s1 => s1.RevisionNumber)) 
select s 

生成這個SQL(根據LINQPad):

-- Region Parameters 
DECLARE @p0 UniqueIdentifier = 'e3f319f1-65cc-4799-b84d-309941dbc1da' 
-- EndRegion 
SELECT [t0].[SubContentRevisionID], [t0].[SubContentID], [t0].[RevisionNumber], [t0].[RevisionText], [t0].[CreatedDate], [t0].[ModifiedDate] 
FROM [SubContentRevision] AS [t0] 
WHERE ([t0].[SubContentID] = @p0) AND ([t0].[RevisionNumber] = ((
    SELECT MAX([t1].[RevisionNumber]) 
    FROM [SubContentRevision] AS [t1] 
    ))) 

我怎樣才能使它產生這個SQL語句?我似乎無法找到任何相關的任何地方。 (我需要它的where子句添加到子查詢)

-- Region Parameters 
DECLARE @p0 UniqueIdentifier = 'e3f319f1-65cc-4799-b84d-309941dbc1da' 
-- EndRegion 
SELECT [t0].[SubContentRevisionID], [t0].[SubContentID], [t0].[RevisionNumber], [t0].[RevisionText], [t0].[CreatedDate], [t0].[ModifiedDate] 
FROM [SubContentRevision] AS [t0] 
WHERE ([t0].[SubContentID] = @p0) AND ([t0].[RevisionNumber] = ((
    SELECT MAX([t1].[RevisionNumber]) 
    FROM [SubContentRevision] AS [t1] 
    WHERE [SubContentID] = @p0 -- **********Adds the where clause********** 
    ))) 

回答

4

我想你想:

from s in SubContentRevisions 
where s.SubContentID.Equals("e3f319f1-65cc-4799-b84d-309941dbc1da") 
    && s.RevisionNumber == (SubContentRevisions.Where(s.SubContentID.Equals("...")) 
              .Max(s1 => s1.RevisionNumber)) 
select s 

,或者更明確:

var specificSubContents = SubContentRevisions.Where(s => 
       s.SubContentID.Equals("e3f319f1-65cc-4799-b84d-309941dbc1da") 

var query = from s in specificSubContents 
      where s.RevisionNumber = s.Max(s1 => s1.RevisionNumber) 
      select s; 

或者,這聽起來像你實際上可以這樣做:

var latest = (from s in SubContentRevisions 
       where s.SubContentID.Equals("e3f319f1-65cc-4799-b84d-309941dbc1da") 
       orderby s.RevisionNumber descending 
       select s).FirstOrDefault(); 
+0

哇......我不敢相信我沒有嘗試過。 – sdm350 2012-03-11 21:44:57

0

如何回合添加where子句的子查詢(最大):

from s in SubContentRevisions 
where s.SubContentID.Equals("e3f319f1-65cc-4799-b84d-309941dbc1da") 
    && s.RevisionNumber == (SubContentRevisions 
            .Where(s1 => s1.SubContentID.Equals(s.SubContentID)) 
            .Max(s1 => s1.RevisionNumber)) 
select s