如何在Dapper Extensions中编写Not Equal(不等于)查询子句?
实现方案
步骤1:补充AddressTown的非空、非空字符串查询条件
Dapper Extensions 内置了Operator.IsNotNull对应IS NOT NULL语法,Operator.Ne对应不等于(<>)语法,直接在原有谓词组里新增两个条件即可:
PredicateGroup pgMain = new PredicateGroup { Operator = GroupOperator.And, Predicates = new List<IPredicate>() }; // 原有ID等于2的条件 pgMain.Predicates.Add(Predicates.Field<tblPeople>(f => f.ID, Operator.Eq, 2)); // 新增AddressTown非空条件 pgMain.Predicates.Add(Predicates.Field<tblPeople>(f => f.AddressTown, Operator.IsNotNull, null)); // 新增AddressTown不等于空字符串条件 pgMain.Predicates.Add(Predicates.Field<tblPeople>(f => f.AddressTown, Operator.Ne, ""));
步骤2:添加排序规则
要实现ORDER BY Description,需要构造排序参数传入GetList方法:
// 构造升序排序规则 var sortRules = new List<ISort> { Sort.Property<tblPeople>(f => f.Description, ascending: true) };
步骤3:获取结果并处理去重
Dapper Extensions 原生的GetList方法不直接支持SELECT DISTINCT语法,你可以查询到匹配的tblPeople集合后,通过LINQ提取去重的Description字段,最终效果和目标SQL完全一致:
var peopleList = connection.GetList<tblPeople>(pgMain, sortRules).ToList(); // 提取去重的Description集合 var distinctDescriptions = peopleList.Select(p => p.Description).Distinct().ToList();
如果希望直接在SQL层面生成DISTINCT减少数据传输,也可以直接用Dapper原生查询结合上述生成的谓词条件拼接SQL,上述方案是兼容Dapper Extensions原生API的最低成本实现。
内容的提问来源于stack exchange,提问作者Rana Chakraborty
相关产品推荐
相关产品推荐

