LINQ Где в MAX - PullRequest
       20

LINQ Где в MAX

1 голос
/ 12 марта 2012

В настоящее время у меня есть этот оператор linq:

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**********
    )))

Ответы [ 2 ]

4 голосов
/ 12 марта 2012

Я думаю, что вы хотите:

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 голосов
/ 12 марта 2012

Как насчет добавления предложения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...