恥ずかしながらしらんかった
サブクエリ-内では Order By が使えないらしい (無知)。
まぁ私もサブクエリ-で使おうと思ったわけじゃなくて、 Entity Framework Core の FromSqlRaw でハマったんだけど。
var columnName = "Url";
var columnValue = new SqlParameter("columnValue", "http://SomeURL");
var blogs = await context.Blogs
.FromSqlRaw($"SELECT * FROM [Blogs] WHERE {columnName} = @columnValue ORDER BY [Blogs].[Rating] DESC", columnValue);
こういうコ-ド (実際は FromSqlRaw を使わざるを得ない複雑なクエリだけど)。
blogs を Radzen DataGrid に喰わせたら発生した。
SELECT COUNT(*) FROM (
SELECT * FROM [Blogs]
WHERE {columnName} = @columnValue
ORDER BY [Blogs].[Rating] DESC
)
理由は Radzen DataGrid 内部でデ-タ件数算出の為に、上記のような SQL が発行されるから。
じゃあどうすればいいかというと…
var columnName = "Url";
var columnValue = new SqlParameter("columnValue", "http://SomeURL");
var blogs = await context.Blogs
.FromSqlRaw($"SELECT * FROM [Blogs] WHERE {columnName} = @columnValue, columnValue)
.OrderByDescending(blogs => blogs.Rating);
とすれば OK
FromSqlRaw は IQueryable を返すから OrderBy とかはメソッドチェ-ンでやれる事を知って感動した。
次からはもっと綺麗に作れそう。