Repository 简化实现多条件查询
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,Repository 在做查询的时候,如果查询条件多的话,linq查询表达式会写的很复杂,比如:public IQueryable Get(int id, string name, string ad
千家信息网最后更新 2025年12月02日Repository 简化实现多条件查询
Repository 在做查询的时候,如果查询条件多的话,linq查询表达式会写的很复杂,比如:
public IQueryableGet(int id, string name, string address, Status? status, DateTime createTime){ var query = _entities; if(id != 0) { query = query.where(x => x.Id == id); } if(!string.IsNullOrWhiteSpace(name)) { query = query.where(x => x.Name.Contains(name)); } if(!string.IsNullOrWhiteSpace(address)) { query = query.where(x => x.Address.Contains(address)); } if(status.HasValue) { query = query.where(x => x.Status == status.Value); } if(createTime != null) { query = query.where(x => x.CreateTime == createTime); } // ... return query;}
可以看到,查询条件多的话,我们会写很多的if判断,代码看起来很不美观,解决方式使用Expression,示例代码:
using System.Linq.Expressions;public IQueryableGet(int id, string name, string address, Status? status, DateTime createTime){ Expression > studentFunc = x => (id == 0 || x.Id == id) && (string.IsNullOrWhiteSpace(name) || x.Name.Contains(name)) && (string.IsNullOrWhiteSpace(address) || x.Address.Contains(address)) && (!status.HasValue || x.Status == status.Value) && (createTime == null || x.CreateTime <= createTime); return _entities.Where(studentFunc);}
生成示例sql代码:
SELECT `x`.`id`, `x`.`name`, `x`.`address`, `x`.`status`, `x`.`create_time`FROM `students` AS `x`WHERE (`x`.`id` = 2)AND (`x`.`status` = 0) AND (`x`.`create_time` == '2017-04-25T16:24:29.769+08:00'))
查询
代码
条件
示例
复杂
美观
方式
时候
表达式
生成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华为摄像机添加云服务器地址
软件开发外包的业务
华三服务器带外管理配置
网络安全短片中学生
公共场合网络安全吗
服务器防御是怎么做的
黑马数据库课后答案
怎么给学校的服务器杀毒
珠海软件开发费用是多少
上海修诺网络技术
网络安全与规范
sql创建学生成绩系统的数据库
行唐软件开发费用
美国的网络安全法律
计算机网络技术 谢希仁著
广西的网络安全企业有哪些
应用软件开发工具官方最新版
adsa软件开发
网络安全大赛csgo
小学学校网络安全应急预案
软件开发外包的业务
公安局数据库
组态软件开发报价
服务器为什么不能连接无线
计算机网络技术培训心得
数据库系统可以表示为
大学网络安全管理体系建设
软件开发者大会完整版
上证所信息网络技术有限公司
云服务器 域名解析