Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa..
Preciso pegar os 10 primeiros registros e o número total de registros da tabela.
Tem como pegar o total sem trazer os registros?
Grato !
Sim.
Se eu transformar o Count(*) em linq, e fizer outro linq pra pegar os registros fica custoso para a aplicação?
Queria isso em uma query
Um amigo aqui, fez assim..
SELECT COUNT(ID) OVER() AS "TOTAL REGISTROS",
SSL.*
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ID) AS ROWNUM,
ID,
DESCRICAO
FROM PERMISSAO
) AS SSL
WHERE SSL.ROWNUM BETWEEN 1 AND 10 AND Descricao LIKE '%tes%'
O principio é esse, mas TOTAL REGISTROS está trazendo número de registro da query, e não o número total de registros..
Com o OVER se trás os registros e os totais , é uma forma , quanto ao custo para saber o total é preciso somar todos os registros.
A vantagem do OVER é tratar isto na camada de visualização com apenas uma sql.
SELECT * FROM PERMISSAO WHERE DESCRICAO LIKE '%tes%'
Me retorna 34 registros.
O select do post #3 me retorna 8, e na coluna "TOTAL REGISTROS" tudo 8.
Queria que na coluna "TOTAL REGISTROS" viesse 34.
To pesquisando aqui também.. Mas não entendi muito bem esse OVER() :upset:
O Over esta servindo para enumerar as linhas para vc...
Qdo vc diz:
>
Preciso pegar os 10 primeiros registros e o número total de registros da tabela.
é na msm consulta??
>
O Over esta servindo para enumerar as linhas para você...
Qdo você diz:
é na msm consulta??
Se possível..
Na verdade estou fazendo um esquema de paaginação, queria fazer em linq, mas se não der, o jeito vai ser uma proc mesmo..
Consegui..
Ficou assim:
SELECT * FROM (
SELECT COUNT(ID) OVER() AS "TOTAL REGISTROS",
SSL.*
FROM(
SELECT ROW_NUMBER() OVER (ORDER BY ID) AS ROWNUM,
ID,
DESCRICAO
FROM PERMISSAO
WHERE DESCRICAO LIKE '%TES%'
)AS SSL ) AS TTL
WHERE TTL.ROWNUM BETWEEN 1 AND 10
Será que da pra dar uma otimizada nisso?
Ou transformar em linq?
Consegui em linq:
var query = (from p in
(from p in ctx.Permissao
where p.Descricao.Contains(permissao.Descricao)
select new
{
pe = p,
agrupa = "x"
})
group p by new { p.agrupa }
into g
from i in g
select new
{
per = i.pe,
row = g.Count(p => p.agrupa != null),
}).ToList()
.Skip((pagina - 1) * quantidadeLinha)
.Take(quantidadeLinha);
não estou certo desta síntexe todavia
select top 10 from tabela
desta estou certo.
select count(*) from tabela