簡體   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