Dapper Extension使用LIKE运算符时查询结果顺序颠倒问题
顺序颠倒的核心原因
Dapper Extensions 的 GetByPredicate 方法默认不会生成 ORDER BY SQL 子句,这是结果顺序不符合预期的根本原因。
- 所有关系型数据库的官方规范都明确说明:没有显式指定 ORDER BY 的查询,返回结果的顺序不具备任何确定性。结果顺序会受数据插入顺序、存储引擎页拆分、索引命中规则、磁盘存储碎片等多种底层因素影响,没有固定规律。
- 你遇到的 test2 排在 test1 前的情况,是因为当前查询没有命中对应字段的升序索引,存储引擎按照数据在磁盘上的物理存储顺序读取记录,刚好是逆序返回的结果,这属于数据库的正常表现,并不是 Dapper Extensions 或者 LIKE 查询的BUG。
解决方案
如果需要固定返回结果的排序规则,必须显式指定排序条件,Dapper Extensions 中可以通过带排序参数的 GetList 方法实现:
// 构造LIKE查询条件 var predicate = Predicates.Field<Entity>(row => row.要匹配的字段名, Operator.Like, $"%{搜索关键词}%"); // 构造排序规则:按匹配字段升序排列,如需降序将ascending设为false即可 var sortRules = new List<ISort> { Predicates.Sort<Entity>(row => row.要匹配的字段名, ascending: true) }; // 执行查询,结果会严格按照指定规则排序 var result = dbConnection.GetList<Entity>(predicate, sortRules).ToList();
内容的提问来源于stack exchange,提问作者dev31
相关产品推荐
相关产品推荐

