Repository 简化实现多条件查询
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Repository 在做查询的时候,如果查询条件多的话,linq查询表达式会写的很复杂,比如:public IQueryable Get(int id, string name, string ad
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
互联网与科技
互联网科技公司排名
中关村互联网 科技集团
北京路客互联网科技有限公司
科技企业和互联网企业
美国互联网科技巨头监管
互联网医疗科技
互联网金融公司科技
善班互联网科技
世界互联网领先科技成果
居家互联网科技有限公司
中正互联网科技招聘
互联网之后的科技是什么
金融科技与互联网金融相同和不同
互联网金融科技公司干啥的
本届互联网博览会上的黑科技
华夏恒生科技与互联网科技
互联网第三次科技革命特征
智帮互联网科技公司最近动向
10位科技互联网大佬
咖啡豆
互联网科技公司
广东万易互联网科技有限公司惠州分公司
时间互联网络科技
上海卓越科技 互联网
移动互联网科技公司
互联网与医疗科技
互联网科技的全部知识
阿里互联网科技企业
广州燕处互联网科技有限公司