Pandora Pocket

IT系と日常系の備忘録。三日坊主。

Entity Framework 3.0 Coreだと LastOrDefaultが利用できない

よく考えればそりゃそうか感はあるんですが。

Entity Framework 3.0 Coreでは破壊的変更としてLINQ クエリがクライアントで評価されなくなった という修正があります。

.NETの関数を内部的に使っているなどして、SQLに変換できない系統のものが動かなくなったんですが、それに関係なさそうな LastOrDefault も利用できなくなっていました。

例えばこんな感じのLINQ

await Context.Set()
.Where(r => r.COLUMN1 == "hoge")
.Select(s => s.COLUMN2)
.LastOrDefaultAsync();

GitHubのIssueを見てると該当するものが。

対応としては OrderByDescending()を使って明示的に降順に並び替えてからFirstOrDefaultAsync()を呼び出す感じ。
LastOrDefaultAsync()だと結果が確定的でない可能性があるので、厳密に判定できるようにこういう対応をしたようで。

つい最近のEFCoreへのP-rで、もう少しわかりやすいエラーメッセージになるようです。