繁体   English   中英

Linq if else 条件

[英]Linq if else condition

如何将以下查询合并为一个查询? 我认为多个 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();

我有一个建议。 您可以将其提取到一个通用方法中,在该方法中您将传递一个选择器 function,它指定用于过滤的属性和您想要比较的 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 语句将缩小为以下 2 行:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM