Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Migração ASP MVC Msql para MySQL


Tem certeza de que sua segunda consulta está realmente correta?

1) Id =d.Id, <=Por que esta vírgula (não é realmente importante)? ('ID =' é redundante)

2) .Where(m => m.Trash ==false) <='Trash' não está no select, então esta propriedade não é conhecida no momento

3) .OrderByDescending(f => f.Created) <=idem for 'Created'

4) Por que uma vírgula depois de .ToList()?

Simplifiquei seu DDL (que não é um MWE) com dados gerados. Reproduzi seu problema no VS2013.

Também testei sua consulta com o LINQPad diretamente no banco de dados e tenho o mesmo problema com o terceiro teste, provavelmente um bug no driver mysql:
trdposts.Select(a => new {
    Created = a.Created,
    Body = a.Body,
    Comments = a.Posttrdcomments
                .Select(d => new { Body = d.body, Id = d.Id, d.Created, d.Trash})
                .Where(m => m.Trash == 1)
                .OrderByDescending(f => f.Created)
                .Skip(33)
                .Take(10)
                .ToList()
    })

Dê uma consulta SQL mais curta:
SELECT t1.PostId, t1.body, t1.Id, t1.Created, t1.Trash
FROM trdposts AS t0
    OUTER APPLY (
      SELECT t2.body, t2.Created, t2.Id, t2.PostId, t2.Trash
      FROM trdcomments AS t2
      WHERE ((t2.PostId = t0.Id) AND (t2.Trash = 1))
      ORDER BY t2.Created DESC
  ) AS t1
ORDER BY t1.Created DESC

Sem .Skip() e .Take(), obtemos um bom 'LEFT OUTER JOIN'