Apakah Anda yakin kueri kedua Anda benar?
1) Id =d.Id, <=Mengapa koma ini (tidak terlalu penting)? ('ID =' berlebihan)
2) .Where(m => m.Trash ==false) <='Sampah' tidak di pilih, jadi properti ini tidak diketahui saat ini
3) .OrderByDescending(f => f.Created) <=idem untuk 'Created'
4) Mengapa koma setelah .ToList()?
Saya telah menyederhanakan DDL Anda (yang bukan MWE) dengan data yang dihasilkan. Saya telah mereproduksi masalah Anda di VS2013.
Saya juga telah menguji kueri Anda dengan LINQPad langsung terhadap database dan saya memiliki masalah yang sama dengan tes ketiga, mungkin bug di 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()
})
Berikan kueri SQL yang lebih pendek:
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
Tanpa .Skip() dan .Take(), kita mendapatkan 'LEFT OUTER JOIN' yang bagus