Если у меня есть следующий запрос LINQ:
public class _employeeRepository
{
public IQueryable<Employee> getAll()
{
var q = from e in Employees select e;
return q;
}
}
.. я должен сделать ниже, чтобы получить активных сотрудников
public IQueryable<Employee> getActiveEmployees>()
{
return _employeeRepository.getAll().Where(q => q.active);
}
..или я должен создать отдельную функцию?
public class _employeeRepository
{
public IQueryable<Employee> getAll()
{
var q = from e in Employees select e;
return q;
}
public IQueryable<Employee> getActive()
{
var q = from e in Employees where e.active == true select e;
}
}
Какое преимущество или недостаток в том, чтобы делать это так или иначе?
Оба GetActive
и GetActiveEmployees
будут делать то же самое, т. GetActive
GetActiveEmployees
запрос и удерживать его для выполнения.
Запрос не будет отправляться в базу данных до тех пор, пока вы не "материализуете" его, то есть с вызовом ToList
или с помощью IQueryable
в инструкции foreach
.
Затем, и только тогда будет выполняться запрос (в обоих случаях, аналогичный select * from Employees where IsActive=1
)
Тем не менее, лучше использовать код, когда сможете, поэтому я пойду с первым подходом.
getAll
довольно бессмысленен. Это простоreturn Employees;
, Это либо просто делаетEmployees
доступными публично, если это не так, либо просто создает нового участника, идентичного другому.