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'