Pessoal, estou tentando realizar uma consulta com LINQ to SQL para trazer a tabela na ordem em que ela está no banco.
Para isso, defini um index pelo campo ID_VIDEO, como descendente. Assim, o select "select * from videos" vai sempre me trazer os vídeos na ordem dos mais recentes, pois ID_VIDEO é um auto identity.
Então, com "select * from VIDEOS" eu receberia do banco ordenado descendentemente pelo ID_VIDEO
ID_VIDEO outros campos
9
8
7
6
5
4
3
2
1
Ocorre que, quando eu uso TAKE e SKIP, o LINQ gera o seguinte SQL
SELECT [t2].[Id_Video], [t2].[Description], [t2].[Duration], [t2].[Keywords], [t2].[Category], [t2].[Thumb], [t2].[Views], [t2].[TotalRating], [t2].[Votes], [t2].[DateAdd]
FROM (
SELECT [t1].[Id_Video], [t1].[Description], [t1].[Duration], [t1].[Keywords], [t1].[Category], [t1].[Thumb], [t1].[Views], [t1].[TotalRating], [t1].[Votes], [t1].[DateAdd], [t1].[ROW_NUMBER]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[Id_Video] , [t0].[Description], [t0].[Duration], [t0].[Keywords], [t0].[Category], [t0].[Thumb], [t0].[Views], [t0].[TotalRating],
[t0].[Votes], [t0].[DateAdd]) AS [ROW_NUMBER], [t0].[Id_Video], [t0].[Description], [t0].[Duration], [t0].[Keywords], [t0].[Category], [t0].[Thumb], [t0].[Views], [t0].[TotalRating], [t0].[Votes], [t0].[DateAdd]
FROM [dbo].[Videos] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN 0 + 1 AND 0 + 40
) AS [t2]
ORDER BY [t2].[ROW_NUMBER]
Pelo SQL acima, dá para perceber que LINQ TO SQL abandonou o índice do campo ID_VIDEO (descendente e clusterizado) e está agora trazendo na ordem crescente, pois está faltando o DESC alí no order (sublinhado).
Se eu tentar usar o .OrderByDescending(), eu acabo tendo que ordenar a tabela inteira para somente então usar o Skip e o Take, destruindo a performance.
Como eu posso obter um select que traga a tabela na ordem em que um select comum me traria?