C# 我应该重复使用相同的LINQ IQueryable吗?

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中

如果我有以下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中的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方法控制的。