当前位置: 首页 > 知识库问答 >
问题:

我应该使用哪种设计模式来处理多个if条件以根据输入获得搜索结果

丌官飞章
2023-03-14

谁能给我建议一下,我应该使用哪种设计模式来处理一个搜索函数的多个if条件。

搜索功能采用产品的名称、类型和位置。在我的处理程序中,我使用if条件处理输入,如下例所示。

if(!string.isNullOrEmpty(ProductName) && !string.isNullOrEmpty(ProductType))
{

  //Query product and retrun base on name and type.
  var product = database.product.where(x=>x.productname == productname).where(x=>x.producttype == producttype).ToList()

} else if(!string.isNullOrEmpty(ProductName) 
&& !string.isNullOrEmpty(ProductType)
&& !string.isNullOrEmpty(ProductLocation)){

 //Query product and return base on name and location.
 var product = database.product.where(x=>x.productname == productname).where(x=>x.ProductLocation == ProductLocation).ToList()
}

因此,我最终在处理程序中有了倍数if条件。代码开始变得越来越大。将来,当我可能有新类型的输入。特别是,每个if条件将具有相同的查询功能,并且只有在条件基于输入添加或删除的情况下才具有相同的查询功能。

有没有更好的方法来处理输入和删除重复的查询函数?

共有1个答案

东门翰
2023-03-14

这不是设计模式,而是使用LINQ时常用的方法

var query = database.product.AsQueryable();

if (!string.IsNullOrEmpty(productName))
   query = database.product.Where(x => x.productname == productname);

if (!string.IsNullOrEmpty(productType))
   query = database.product.Where(x => x.producttype == producttype);

var product = query.ToList();

或通过helper函数:

public static class MyQuerybaleExtensions
{
    public staic IQueryble<T> WhereIf<T>(this IQueryable<T> source, bool condiion, Expression<Func<T, bool> predicate)
    {
        if (condition)
            source = source.Where(predicate);
        return source;
    }
}
var product = database.product
    .WhereIf(!string.IsNullOrEmpty(productName), x => x.productname == productname)
    .WhereIf(!string.IsNullOrEmpty(productType), x => x.producttype == producttype)
    .ToList();
 类似资料:
  • 目前我有3个类,其中大多数变量是相同的。所有变量都有getter和setter。我需要根据提供的数据类型变量Year创建类的对象,并在十多个方法中传递该对象。让我们举个例子。 我们有三个班,A班,B班,C班。如果我们通过2017年,那么我需要ClassA的目标。如果我们通过2016年,那么我需要B类的目标,而对于所有其他年份,我们需要C类的目标。 然后,我们需要在所有10个方法中传递该对象。让我们

  • 我一直在写一些批处理文件,我偶然发现了这本用户指南,它提供了大量信息。它告诉我的一件事是,行不仅可以用注释,还可以用注释。上面写着: 批处理代码中的注释可以使用双冒号进行,这比使用REM命令更好,因为标签是在重定向符号之前处理的。

  • 我目前正在使用HibernateConstraintValidator来实现我的验证。但是我的审阅者不喜欢在代码或!运算符中使用if/其他。我可以使用哪种设计模式来删除验证逻辑中的if/其他? 在下面的代码中,他不想要if/否则 附带说明:我们必须使用域驱动设计(如果有帮助的话)

  • 我编写了一个程序来解析XML文件,以获取一个名为SerialNum的特定标记值,该值包含在Header标记中。该文件的构造如下: < li >它包含一个标题和一个正文 < li >标题可能包含许多SerialNum标签。我们需要提取最后一个标签的值。 我使用Stax解析器获取SerialNum值,并编写了以下代码: 此代码提取所需的值,但代码质量不是很好:它不容易阅读和维护。它包含一个开关案例,如

  • 基于SO上的各种线程(例如。用模式替换if else语句)我知道我可以用< code>Command模式替换多个if\else语句。 我的情况有点不一样。 我有一系列,只有当前一个命令不成功时,我才需要执行每个。 例如,假设我需要从一个假设的网页中检索文本——我可以使用屏幕抓取直接从页面中抓取文本,也可以从API中获取文本。如果屏幕抓取不成功,我只想从API获取文本。换句话说,如果“scrap”命

  • 在javax中输入if条件的位置。swing我正在创建一个注册表格,希望在表格中添加以下条件:•姓名:不能少于3个字母。•地址1和地址2:两个地址不应该相同年龄:不少于18岁身高:不低于130重量:不少于30,但我不知道在哪里进入if状态