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相对较新,如果在这两次执行中存在性能差异,因为检索到的记录数量可能很高,我真的很感兴趣。
答案 0 :(得分:0)
不,不会有性能降低。我的意思是,当你分配更多变量时,你会得到一个非常,非常,非常(千分之一毫秒)第一个中的速度略微降低,而第二个则略微降低速度。但仅此而已。
另外:If you have two horses and you want to know which of the two is the faster, then race your horses!
答案 1 :(得分: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();
唯一的区别是您是否存储对查询变量的引用。