¿Estás seguro de que tu segunda consulta está realmente bien?
1) Id =d.Id, <=¿Por qué esta coma (no es realmente importante)? ('ID =' es redundante)
2) .Where(m => m.Trash ==false) <='Trash' no está en la selección, por lo que esta propiedad no se conoce en este momento
3) .OrderByDescending(f => f.Created) <=ídem para 'Created'
4) ¿Por qué una coma después de .ToList()?
He simplificado tu DDL (que no es un MWE) con datos generados. He reproducido tu problema en VS2013.
También probé su consulta con LINQPad directamente contra la base de datos y tengo el mismo problema con la tercera prueba, probablemente un error en el controlador 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()
})
Da una consulta SQL más corta:
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
Sin .Skip() y .Take(), obtenemos una buena 'UNIÓN EXTERNA IZQUIERDA'