2番目のクエリは本当に大丈夫ですか?
1)Id =d.Id、<=なぜこのコンマ(それほど重要ではない)ですか? ('ID ='は冗長です)
2).Where(m => m.Trash ==false)<='Trash'は選択に含まれていないため、このプロパティは現時点では不明です
3).OrderByDescending(f => f.Created)<='Created'のidem
4).ToList()の後にコンマがあるのはなぜですか?
生成されたデータを使用してDDL(MWEではない)を簡略化しました。VS2013で問題を再現しました。
また、データベースに対してLINQPadを使用してクエリを直接テストしましたが、3番目のテストでも同じ問題が発生します。おそらく、ドライバー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()
})
より短いSQLクエリを与える:
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
.Skip()と.Take()がないと、「LEFTOUTERJOIN」がうまくいきます