c# – LINQ to SQL – 如何有效地执行AND或OR搜索多个条件
发布时间:2020-12-15 03:42:40 所属栏目:百科 来源:网络整理
导读:我有一个ASP.NET MVC网站(使用 Linq To Sql作为ORM),以及一个客户想要一个搜索工具针对定制数据库的情况,他们可以选择进行“AND”搜索(所有条件匹配)或“OR”搜索(任何条件匹配).查询是非常复杂和漫长的,我想知道是否有一个简单的方法,我可以做到这一点,而无
我有一个ASP.NET MVC网站(使用
Linq To Sql作为ORM),以及一个客户想要一个搜索工具针对定制数据库的情况,他们可以选择进行“AND”搜索(所有条件匹配)或“OR”搜索(任何条件匹配).查询是非常复杂和漫长的,我想知道是否有一个简单的方法,我可以做到这一点,而无需创建和维护两个不同版本的查询.
例如,当前的“AND”搜索看起来像这样(但是这是一个非常简化的版本): private IQueryable<SampleListDto> GetSampleSearchQuery(SamplesCriteria criteria) { var results = from r in Table where (r.Id == criteria.SampleId) && (r.Status.SampleStatusId == criteria.SampleStatusId) && (r.Job.JobNumber.StartsWith(criteria.JobNumber)) && (r.Description.Contains(criteria.Description)) select r; } 我可以复制一下,更换&&用||操作符获得“OR”版本,但觉得必须有更好的方式实现这一点.有没有人有任何建议如何以易于维护的高效灵活的方式实现?谢谢. 解决方法
您可以创建一个扩展方法
public static IQueryable<T> BoolWhere<T>(this IQueryable<T> source,Expression<Func<T,TValue>> selector,bool isOr) { //use isOr value to determine what expression to build and add to the source } 其中’isOr’将决定是使用’和’表达式还是使用’或’表达式.然后,您可以构建您的查询 bool isOr = true; //or false var results = Data.BoolWhere(r => r.Id == criteria.SampleId,isOr) .BoolWhere(r => r.Status.SampleStatusId == criteria.SampleStatusId,isOr) .BoolWhere(r => r.Job.JobNumber.StartsWith(criteria.JobNumber),isOr) .BoolWhere(r => r.Description.Contains(criteria.Description),isOr) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- swift3.0 图片放大缩小动画效果
- 【COCOS2DX-游戏开发之三四】cocos2dx 3.0 TableView特殊用
- react-native开发ide基于atom的 【nuclide】
- 数字正则表达式,数字校验表达式,最正确的数字校验正则表达
- React Native入门(一)环境搭建与Hello World
- 使用RubyAudio的音频文件的长度(例如.wav)
- NAND Flash ECC算法长度计算
- xml.etree.ElementTree — The ElementTree XML API
- cocos2dx setGlobeZOrder setLocalZOrder setOrderOfArriva
- ios – XCTest断言期望未得到满足