Linq否则条件

问题描述

如何将以下查询合并到单个查询中?我认为多个if会不必要地增加代码复杂性。

var query = scenario.Where(x => x.ScenarioNumber == ScenarioNumber).Select(x => x).Distinct().ToList();

// Match exception number else return wild card entries.
if(query.Any(x=>x.ExcepNumber == ExcepNumber))
{
    query = query.Where(x => x.ExcepNumber == ExcepNumber).ToList();
}
else
{
   query = query.Where(x => x.ExcepNumber == "**").ToList();
}

// Match regime else return wild card entries.
if (query.Any(x => x.Regime == Regime))
{
     query = query.Where(x => x.Regime == Regime).ToList();
}
else
{
     query = query.Where(x => x.Regime == "**").ToList();
}
finalResponse = query.Select(x => x.TestColumn).Distinct().ToList();

解决方法

我有个建议。您可以将其提取到一个通用方法中,在该方法中将传递一个选择器函数,该函数指定要用于过滤的属性以及要比较的2个选择(当然还有集合)。

private List<T> EitherFilterOrWildCard<T>(Func<T,string> selector,string compare,string elseCompare,List<T> query)
{
    var temp = query.Where(x => selector(x) == compare);
    
    return temp.Any() ? temp.ToList() : query.Where(x => selector(x) == elseCompare).ToList();
    
}

您的if语句将缩小到这两行:

query = EitherFilterOrWildCard<MyClass>(x => x.ExcepNumber,ExcepNumber,"**",query);
query = EitherFilterOrWildCard<MyClass>(x => x.Regime,Regime,query);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...