Entity Framework / Linq to SQL: ignorar

Apenas curioso para saber como o Skip & Take deve funcionar. Estou obtendo os resultados que desejo ver no lado do cliente, mas quando conecto o AnjLab SQL Profiler e observo o SQL que está sendo executado, parece que ele está consultando e retornando todo o conjunto de linhas para o cliente.

Realmente está retornando todas as linhas e depois classificando e restringindo as coisas com o LINQ no lado do cliente?

Eu tentei fazê-lo com o Entity Framework e o Linq to SQL; ambos parecem ter o mesmo comportamento.

Não tenho certeza de que faça alguma diferença, mas estou usando C # no VWD 2010.

Alguma visão?

public IEnumerable<Store> ListStores(Func<Store, string> sort, bool desc, int page, int pageSize, out int totalRecords)
{
    var context = new TectonicEntities();
    totalRecords = context.Stores.Count();
    int skipRows = (page - 1) * pageSize;
    if (desc)
        return context.Stores.OrderByDescending(sort).Skip(skipRows).Take(pageSize).ToList();
    return context.Stores.OrderBy(sort).Skip(skipRows).Take(pageSize).ToList();
}

SQL resultante (Nota: estou excluindo a consulta Count):

SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[Name] AS [Name], 
[Extent1].[LegalName] AS [LegalName], 
[Extent1].[YearEstablished] AS [YearEstablished], 
[Extent1].[DiskPath] AS [DiskPath], 
[Extent1].[URL] AS [URL], 
[Extent1].[SecureURL] AS [SecureURL], 
[Extent1].[UseSSL] AS [UseSSL]
FROM [dbo].[tec_Stores] AS [Extent1]

Após algumas pesquisas, descobri que o seguinte funciona da maneira que eu esperava:

public IEnumerable<Store> ListStores(Func<Store, string> sort, bool desc, int page, int pageSize, out int totalRecords)
{
    var context = new TectonicEntities();
    totalRecords = context.Stores.Count();
    int skipRows = (page - 1) * pageSize;           
    var qry = from s in context.Stores orderby s.Name ascending select s;
    return qry.Skip(skipRows).Take(pageSize);           
}

SQL resultante:

SELECT TOP (3) 
[Extent1].[ID] AS [ID], 
[Extent1].[Name] AS [Name], 
[Extent1].[LegalName] AS [LegalName], 
[Extent1].[YearEstablished] AS [YearEstablished], 
[Extent1].[DiskPath] AS [DiskPath], 
[Extent1].[URL] AS [URL], 
[Extent1].[SecureURL] AS [SecureURL], 
[Extent1].[UseSSL] AS [UseSSL]
FROM ( SELECT [Extent1].[ID] AS [ID], [Extent1].[Name] AS [Name], [Extent1].[LegalName] AS [LegalName], [Extent1].[YearEstablished] AS [YearEstablished], [Extent1].[DiskPath] AS [DiskPath], [Extent1].[URL] AS [URL], [Extent1].[SecureURL] AS [SecureURL], [Extent1].[UseSSL] AS [UseSSL], row_number() OVER (ORDER BY [Extent1].[Name] ASC) AS [row_number]
    FROM [dbo].[tec_Stores] AS [Extent1]
)  AS [Extent1]
WHERE [Extent1].[row_number] > 3
ORDER BY [Extent1].[Name] ASC

Eu realmente gosto da maneira como a primeira opção funciona; Passando uma expressão lambda para classificação. Existe alguma maneira de realizar a mesma coisa na sintaxe de ordem LINQ to SQL? Eu tentei usar qry.OrderBy (sort) .Skip (skipRows) .Take (pageSize), mas isso acabou me dando os mesmos resultados que o meu primeiro bloco de código. Isso me leva a acreditar que meus problemas estão de alguma forma ligados ao OrderBy.

====================================

PROBLEMA RESOLVIDO

Teve que quebrar a função lambda recebida na Expressão:

Expression<Func<Store,string>> sort

questionAnswers(5)

yourAnswerToTheQuestion