Weet je zeker dat je tweede vraag echt goed is?
1) Id =d.Id, <=Waarom deze komma (niet echt belangrijk)? ('ID =' is overbodig)
2) .Where(m => m.Trash ==false) <='Trash' staat niet in de selectie, dus deze eigenschap is op dit moment niet bekend
3) .OrderByDescending(f => f.Created) <=idem voor 'Created'
4) Waarom een komma na .ToList()?
Ik heb uw DDL (wat geen MWE is) vereenvoudigd met gegenereerde gegevens. Ik heb uw probleem gereproduceerd in VS2013.
Ik heb uw vraag met LINQPad ook rechtstreeks in de database getest en ik heb hetzelfde probleem met de derde test, waarschijnlijk een bug in de 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()
})
Geef een kortere SQL-query:
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
Zonder .Skip() en .Take(), krijgen we goede 'LEFT OUTER JOIN'