【发布时间】:2020-12-28 14:45:42
【问题描述】:
我需要忽略 where 子句中的空参数,以便我可以从用户端使用应用的过滤器获取适当的数据。为了实现这一点,我目前正在使用 if..else 嵌套方法,该方法随着参数数量的增加而增大。我想知道是否有任何其他有效的方法可以通过避免行数和复杂性并提高可读性来处理这种情况
public List<Members> GetMembers(int currentPosition, string memberStatus,
string package, string packageStatus, string branch)
{
var members = new List<Members>();
if (package != null)
{
//include package
if (packageStatus != null)
{
//include package, packageStatus
if (branch != null)
{
//include package,packageStatus,branch
members = db.Members.Where(x => x.PackageName == package && x.PackageStatus == packageStatus && x.Branch == branch).ToList();
}
else
{
//include package,packageStatus
members = db.Members.Where(x => x.PackageName == package && x.PackageStatus == packageStatus).ToList();
}
}
else
{
if (branch != null)
{
//include package,branch
members = db.Members.Where(x => x.PackageName == package && x.Branch == branch).ToList();
}
else
{
//include package
members = db.Members.Where(x => x.PackageName == package).ToList();
}
}
}
else
{
if (packageStatus != null)
{
//include packageStatus
if (branch != null)
{
//include packageStatus,branch
members = db.Members.Where(x => x.PackageStatus == packageStatus && x.Branch == branch).ToList();
}
else
{
//include packageStatus
members = db.Members.Where(x => x.PackageStatus == packageStatus).ToList();
}
}
else
{
if (branch != null)
{
//include packageStatus,branch
members = db.Members.Where(x => x.PackageStatus == packageStatus && x.Branch == branch).ToList();
}
else
{
//include nothing
members = db.Members.ToList();
}
}
}
return members;
}
【问题讨论】:
-
当
package为空时你执行x => x.PackageName == package很奇怪。 -
@RomanRyzhiy 看到这就是问题所在。对这些参数感到困惑。抱歉现在将编辑代码
标签: c# code-readability maintainability