0

1]

IQueryable<StronglyTypedObject> cp = 
      context.People.OfType<StronglyTypedObject>()
                    .Where(o=> o.EmployerId == Id_Method_Param_Variable);
List<StronglyTypedObject> lst = cp.ToList();

2]

List<StronglyTypedObject> cp = 
      context.People.OfType<StronglyTypedObject>()
                    .Where(o=> o.EmployerId == Id_Method_Param_Variable)
                    .ToList();

这可能是一个非常简单的问题,但我对 LINQ 相对较新,如果这两次执行中存在性能差异,我真的很感兴趣,因为检索到的记录数量可能很高。

4

2 回答 2

0

在第一种情况下,您创建一个附加变量来保存对查询定义的引用(这只是堆栈上的一个附加引用)。查询是简单的数据,定义查询时不执行任何操作。ToList()当您尝试获取它的结果(例如调用或迭代查询)时,将执行查询。

要了解您的样本之间的差异,请考虑以下课程:

public class Query
{
    private int _employeeId;

    public Query(int employeeId)
    {
        _employeeId = employeeId;
    }

    // here is query execution
    public List<Employee> ToList()
    {
        string sqlQuery = "SELECT * FROM Employees WHERE ID = " + _employeeId;
        // we execute sql query on server
        // and return employees which matches our query data            
        return listOfEmployees;
    }
}

您的第一个样本:

var query = new Query(42);
var result = query.ToList();

您的第二个样本:

var result = new Query(42).ToList();

唯一的区别是您是否存储对查询变量的引用。

于 2013-07-19T06:47:08.680 回答
0

不,不会降低性能。我的意思是,当您分配更多变量时,与第二个相比,第一个的速度会非常、非常、非常(以千分之一纳秒)略有降低。但仅此而已。

另外:如果您有两匹马,并且您想知道哪两匹马更快,那就赛马吧!

于 2013-07-19T06:38:06.713 回答