gpt4 book ai didi

c# - LINQ to SQL - 如何高效地对多个条件执行 AND 或 OR 搜索

转载 作者:可可西里 更新时间:2023-11-01 09:09:40 28 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 站点(它使用 Linq To Sql 作为 ORM),并且客户想要一个针对定制数据库的搜索工具,他们可以选择进行“AND”搜索(所有条件匹配)或“或”搜索(任何条件匹配)。该查询非常复杂且冗长,我想知道是否有一种简单的方法可以使它同时执行这两项操作,而无需创建和维护两个不同版本的查询。

例如,当前的“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;

}

我可以复制它并将 && 替换为 ||运营商获得“或”版本,但觉得必须有更好的方法来实现这一点。有没有人对如何以一种高效、灵活且易于维护的方式实现这一目标有任何建议?谢谢。

最佳答案

您可以按照以下方式创建扩展方法

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”将确定是使用“and”表达式还是“or”表达式。然后您可以按照以下行构造您的查询

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)

关于c# - LINQ to SQL - 如何高效地对多个条件执行 AND 或 OR 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500972/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com