【发布时间】:2013-11-01 16:09:41
【问题描述】:
有没有办法避免 C# 中出现多个 IF/CASE 语句?
在我的应用程序中,我最终会使用 8 个以上的字段来创建 Linq 查询,其中每个表达式都可以为 null 或 != null,因此它会给我 64 个场景。
我没有提供任何代码示例,因为我可以使用 IF/CASE 来完成并尽可能简化它。
如果您熟悉解决该问题的一些有用方法,我将不胜感激。
代码示例(它只包括两个代表,但我必须添加更多来过滤数据)
存储库
public virtual IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, Expression<Func<T, bool>> filter1 = null)
{
IQueryable<T> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
return query.ToList();
}
if (filter1 != null)
{
query = query.Where(filter1);
return query.ToList();
}
else
{
return query.ToList();
}
}
控制器
public ActionResult Index(string searchFullName, string searchExtension)
{
var extensionList = new List<string>();
var extensions = from n in unitofwork.DomainRepository.Get()
select n.Extension;
extensionList.AddRange(extensions.Distinct());
ViewBag.searchExtension = new SelectList(extensionList);
if (!String.IsNullOrEmpty(searchFullName) && !String.IsNullOrEmpty(searchExtension))
{
return View(unitofwork.DomainRepository.Get(n => n.Extension == searchExtension && n.Name.Contains(searchFullName)));
}
else if (!String.IsNullOrEmpty(searchExtension))
{
return View(unitofwork.DomainRepository.Get(n => n.Extension == searchExtension));
}
else if (String.IsNullOrEmpty(searchFullName) && String.IsNullOrEmpty(searchExtension))
{
return View(unitofwork.DomainRepository.Get());
}
else if (!String.IsNullOrEmpty(searchFullName) && String.IsNullOrEmpty(searchExtension))
{
return View(unitofwork.DomainRepository.Get(n => n.Name.Contains(searchFullName)));
}
else
{
return View(unitofwork.DomainRepository.Get());
}
}
【问题讨论】:
-
“我没有提供任何代码示例” - 你真的应该这样做,因为 “8+ 个字段 ... LINQ ... 64 个场景” i> 没有多大意义。我们将不得不猜测您的意思,这无助于回答的准确性。
-
这取决于你想要做什么。在您的问题中包含一些代码,否则我们无法为您提供任何有用的帮助。
-
试试switch-case,请提供一些代码。
-
说真的,如果你不想费心提供代码示例,我也不会费心提供避免多个 ifs/cases 的建议。
-
整个想法是向社区询问有关该问题的可能不同方法的问题,然后尝试实现它,而不是编写 200 行长的代码并将其粘贴为我的一部分问题...
标签: c# asp.net-mvc if-statement switch-statement