如何在Kentico的MultiDocumentQuery中用Case When实现自定义排序?
Kentico 表单页面排序:优先显示F开头的类型
嘿,我懂你现在的困扰——你在Kentico里拉取表单类型页面时,想先把所有以字母F开头的页面类型顶在前面,剩下的再按常规字母顺序排列,但之前的代码只能单纯按FormName排序,没法实现类似SQL里CASE WHEN的逻辑对吧?别担心,我来给你搞定这个。
Kentico的MultiDocumentQuery其实支持直接在OrderBy方法里传入自定义的SQL排序表达式,刚好可以完美复刻你想要的逻辑。修改后的代码如下:
MultiDocumentQuery docQuery = DocumentHelper.GetDocuments() .Type("forms") .OnSite(SiteContext.CurrentSiteID) .Published() .OrderBy("CASE WHEN [FormName] LIKE 'F%' THEN 0 ELSE 1 END, [FormName]");
代码说明:
- 我把你SQL里的
CASE WHEN逻辑直接放进了OrderBy参数里,Kentico的查询引擎会自动把这段表达式解析到最终生成的SQL语句中 - 这段逻辑会给所有以F开头的
FormName标记排序优先级为0,其余的标记为1,优先级0的项会全部排在最前面 - 在优先级排序完成后,同一优先级的项会再按
FormName的字母顺序排列,完全匹配你的需求
预期结果示例:
- Form1
- Form2
- Form3
- AlphaForm
- BetaForm
- CharlieForm
- ...
内容的提问来源于stack exchange,提问作者Dilan Quesada
相关产品推荐
相关产品推荐

