Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Migration von ASP MVC MsSql zu MySQL

Sind Sie sicher, dass Ihre zweite Abfrage wirklich in Ordnung ist?

1) Id =d.Id, <=Warum dieses Komma (nicht wirklich wichtig)? ('ID =' ist redundant)

2) .Where(m => m.Trash ==false) <='Trash' befindet sich nicht in der Auswahl, daher ist diese Eigenschaft derzeit nicht bekannt

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

4) Warum ein Komma nach .ToList()?

Ich habe Ihre DDL (die keine MWE ist) mit generierten Daten vereinfacht. Ich habe Ihr Problem in VS2013 reproduziert.

Ich habe Ihre Abfrage auch mit LINQPad direkt gegen die Datenbank getestet und beim dritten Test habe ich das gleiche Problem, wahrscheinlich ein Fehler im Treiber 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()
    })

Geben Sie eine kürzere SQL-Abfrage:

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

Ohne .Skip() und .Take() erhalten wir ein gutes 'LEFT OUTER JOIN'