Meaningless Notebook

我輩は雑記帖である。名はまだない。


恥ずかしながらしらんかった

サブクエリ-内では 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 とかはメソッドチェ-ンでやれる事を知って感動した。

次からはもっと綺麗に作れそう。

参考元


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です