Pergunta

IQueryable<WebEvent> mySearch = 
    eventDC.GetBooks()
        .Where(p => p.Price.Any(d => d.EventDatetime.Month == fromDate.Month 
                                     && d.EventDatetime.Year == fromDate.Year))
        .WithGroup(groupId)
        .OrderBy(p => p.Price.Where(r => r.Datetime >= fromDate)
                             .OrderBy(q => q.Datetime)
                             .FirstOrDefault().Datetime);
List<Book>ventsList = mySearch.ToList<Book>();

Temos uma consulta tão longa e consome muito tempo para obter os livros e a classificação, após o teste de desempenho, encontramos tempo de resposta para a página que contém essa consulta excede 10 segundos, e precisamos procurar resolver isso e reduzir a resposta Tempo.

Alguém tem alguma sugestão?

Foi útil?

Solução

Normalmente, examine o SQL para ver o que está produzindo, que você pode fazer em linha. Existe uma ferramenta que pode ajudá -lo a fazer isso, é chamado Linqpad e você pode criar uma consulta LINQ e brincar com o ajuste da consulta Linq. Além disso, procurando lugares para adicionar índices; Isso também pode acelerar o desempenho (muitos índices podem prejudicar o desempenho, portanto, tenha cuidado também).

Outras dicas

O que exatamente você está tentando fazer? Você pode me dar uma idéia do esquema aqui?

Parece uma declaração estranha para mim, já que não conheço o esquema:

p => p.price.any (d => d.eventDateTime.month ...

No entanto, vou dar uma chance no escuro aqui e dizer que você pode ter um problema com:

eventdc.getbooks ()

Se esse método chamar um procedimento armazenado ou de outra forma fizer um "selecionar * dos livros" no banco de dados, o que você realmente está fazendo é:

  1. Selecionando todos os livros do banco de dados
  2. Pegando a lista resultante e selecionando apenas os livros que você deseja dela

Se for esse o caso, esse é provavelmente o seu maior problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top