C# 我应该重复使用相同的LINQ IQueryable吗?
如果我有以下LINQ查询:C# 我应该重复使用相同的LINQ IQueryable吗?,c#,.net,linq,C#,.net,Linq,如果我有以下LINQ查询: public class _employeeRepository { public IQueryable<Employee> getAll() { var q = from e in Employees select e; return q; } } public class\u employeeRepository { 公共IQueryable getAll() { var q=员工选择e中
public class _employeeRepository
{
public IQueryable<Employee> getAll()
{
var q = from e in Employees select e;
return q;
}
}
public class\u employeeRepository
{
公共IQueryable getAll()
{
var q=员工选择e中的e;
返回q;
}
}
…我应该采取以下措施来吸引积极的员工吗
public IQueryable<Employee> getActiveEmployees>()
{
return _employeeRepository.getAll().Where(q => q.active);
}
public IQueryable getActiveEmployees>()
{
return _employeeRepository.getAll(),其中(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;
}
}
public class\u employeeRepository
{
公共IQueryable getAll()
{
var q=员工选择e中的e;
返回q;
}
公共IQueryable getActive()
{
var q=员工中的e,其中e.active==真选择e;
}
}
以这种或那种方式执行的优点或缺点是什么?无论是
GetActive
还是GetActiveEmployees
都将执行完全相同的操作,即生成一个查询并将其保留以供执行
在“具体化”查询之前,查询将不会被发送到数据库,即通过调用ToList
或在foreach
语句中使用IQueryable
然后,并且只有到那时才会执行查询(在这两种情况下类似于从IsActive=1的员工中选择*)
也就是说,如果可以的话,最好是重用代码,因此我将使用第一种方法。您的
getAll
方法目前是毫无意义的。只是返回员工代码>。这要么只是让员工
可以公开访问(如果当前没有),要么只是创建一个与另一个相同的新成员。扩展@Servy的评论:如果您来自Java背景(因为小写方法),那么直接公开类似员工的,但是在.net世界中,它是可以的,因为对它的访问仍然是通过(隐式)setter和getter方法控制的。