You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET中使用Query Builder实现过滤器降序排序的问题

问题原因

你当前把order by DateChanged desc写在IN子句的括号中不符合SQL语法规范,IN子句仅用于定义要匹配的枚举值集合,不允许嵌套排序逻辑,这是你报错的核心原因。
同时你现在定义的FilterByProgress方法的作用是拼接WHERE条件片段,排序逻辑不属于过滤条件范畴,不该放在这个方法内处理。

修复步骤

  1. 先修改FilterByProgress方法,移除IN子句中的排序语句,仅保留过滤逻辑:
public static List<string> FilterByProgress(this List<string> whereQueryBuilder, string[] progress)
{
    if (progress.Length > 0)
    {
        whereQueryBuilder.Add(string.Format("TA.Progress  IN ({0})",
             string.Join(",", progress.Select(n => "'" + n.ToString() + "'").ToArray())));
    }

    return whereQueryBuilder;
}
  1. 找到你拼接完整SQL语句的代码位置,等所有WHERE过滤条件都拼接完成后,在整个SQL语句的末尾加上排序逻辑即可,示例参考:
// 示例:完整SQL拼接逻辑
List<string> whereConditions = new List<string>();
whereConditions.FilterByProgress(yourProgressArray);
// 这里可以继续添加其他过滤条件
// ...

// 拼接完整SQL
string fullSql = "SELECT 你的查询字段 FROM 你的表名 TA ";
if (whereConditions.Count > 0)
{
    fullSql += "WHERE " + string.Join(" AND ", whereConditions);
}
// 排序逻辑统一加在SQL末尾
fullSql += " ORDER BY DateChanged DESC";

注意事项

当前直接拼接字符串生成SQL的写法存在SQL注入风险,正式项目建议替换为参数化查询,避免直接把用户输入内容拼接到SQL语句中。

内容的提问来源于stack exchange,提问作者pablo191

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 16:15:03