如何解决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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。