Mysql
 sql >> Base de données >  >> RDS >> Mysql

Migration ASP MVC MsSql vers MySQL

Êtes-vous sûr que votre deuxième requête est vraiment correcte ?

1) Id =d.Id, <=Pourquoi cette virgule (pas vraiment importante) ? ('ID =' est redondant)

2) .Where(m => m.Trash ==false) <='Trash' n'est pas dans la sélection, donc cette propriété n'est pas connue pour le moment

3) .OrderByDescending(f => f.Créé) <=idem pour 'Créé'

4) Pourquoi une virgule après .ToList() ?

J'ai simplifié votre DDL (qui n'est pas un MWE) avec les données générées. J'ai reproduit votre problème dans VS2013.

J'ai également testé votre requête avec LINQPad directement sur la base de données et j'ai le même problème avec le troisième test, probablement un bug dans le pilote 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()
    })

Donnez une requête SQL plus courte :

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

Sans .Skip() et .Take(), nous obtenons un bon 'LEFT OUTER JOIN'