繁体   English   中英

在Linq to SQL C#函数中包含或排除where子句

[英]Include or exclude where clause in Linq to Sql c# function

问题是我有UI,用户可以选择位置和工作,但他们可能会在两个下拉菜单中都选择All,如果emplId = 0的值和jobId相同,则下面的linq应该忽略where子句,我知道该怎么做如果EmplId = 0,则使用正常的方法//这样做,但是我想知道是否有更干净的方法可以做到这一点。

public IEnumerable<employees> GetByEmployeIdAndJobId(int EmpId, int JobId)
{
    if (EmplId > 0 && JobId > 0){
    var employees= (from e in Table.Employees
                   where e.employeeId == EmplId && e.JobId == JobId
                   select e).ToList()
    }

    else
    {     var employees= (from e in Table.Employees
                   select e).ToList()
    }
}

我猜你的else部分不包含where子句:

IEnumerable<employees> employees = Table.employees;
if (EmplId > 0 && JobId > 0)
{
  employees = employees.Where(e => (e.employeeId == EmplId && e.JobId == JobId));
}

employees = employees.ToList();

并分别处理EmpID和JobId:

IEnumerable<employees> employees = Table.employees;

if (EmplId > 0)
{
  employees = employees.Where(e => (e.employeeId == EmplId));
}

if (JobId > 0)
{
  employees = employees.Where(e => (e.JobId == JobId));
}

employees = employees.ToList();

我猜您可以使用PredicateBuilder构建一个谓词,以处理用户可以选择的所有方案,例如:

public IEnumerable<Employee> GetByEmployeIdAndJobId(int empId, int jobId)
{
    var predicate = PredicateBuilder.True<Employee>();
    if(empId > 0)
        predicate = predicate.And(e => e.EmployeeId == empId);
    if(jobId > 0)
        predicate = predicate.And(e => e.JobId == jobId);
    return Table.Employees.Where(predicate).ToList();
}    

暂无
暂无

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

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