2014-04-30 3 views
0

У меня есть следующие функции: -Linq - с использованием нескольких переменных в запросе

public IEnumerable<Employee> getEmployees(string department, string searchterm) 
    { 

     IEnumerable<Employee> query; 

     if (department == null || department == ""){ 
      query = from e in db.Employees where e.Date_Leave == null orderby e.EmpSurname select e; 
     }else{ 
      query = from e in db.Employees where (e.Date_Leave == null) && (e.EmpDept==department) orderby e.EmpSurname select e; 
     } 

     return query; 
    } 

На данный момент он просто смотрит на переменной «отдела», чтобы определить, какой запрос бежать, но я также хочу, чтобы это выглядело в переменной «searchTerm», которую я буду использовать против столбца «EmpSurname» . Мой вопрос: возможно ли иметь только один запрос, который будет использовать «department» и «searchTerm», если они не являются нулевыми и игнорируют их, если они ноль. Также может быть, что один является нулевым, а другой - нет. Спасибо

ответ

0

Вы можете составить свой запрос в несколько шагов, и она не будет выполнена, пока результаты не будут на самом деле просил:

public IEnumerable<Employee> getEmployees(string department, string searchterm) 
{ 

    IQueryable<Employee> query = db.Employees.Where(e => e.Data_Leave == null); 

    if (department != null && department != "") { 
     query = query.Where(e => e.EmpDept == department); 
    } 

    if(searchterm != null && searchterm != "") { 
     query = query.Where(e => e.EmpSurname == searchterm); 
    } 

    return query.OrderBy(e => e.EmpSurname); 
} 
0

Вы можете использовать:

var query = from e in db.Employees 
      where e.Date_Leave == null && 
        (department == null || e.EmpDept == department) && 
        (searchTerm == null || /* something using searchTerm */) 
      orderby e.EmpSurname 
      select e; 

Или просто условно добавить запросы, показанные Марсином. Любой подход должен быть хорошим.

Смежные вопросы