多次调用ToList会影响性能吗?

2024-03-20

我经常看到调用 ToList 会使查询每次都被执行。我对此有点困惑。那么在这种情况下,第二次调用 ToList 会使查询执行多次吗?在什么情况下查询会执行多次?

//This gets from database and ToList is already called here
List<Customer> Customers = GetCustomersFromDataBase();

//ToList is called here again
List<Customer> FilteredCustomers = (from c in Customerswhere c.id == 1c).ToList();

Edit

我只是提供了这个代码示例来了解 ToList 的真正用途。我不会以这种方式实现它。 此外,我还进行存储过程调用以从数据库返回客户,并从返回的数据表创建客户列表。


Calling ToList (or ToArray, AsEnumerable等)上IQueryable将执行查询。此后,您使用的任何 LINQ 表达式都将在内存列表上进行操作。

例如,您的代码:

List<Customer> Customers = GetCustomersFromDataBase();

这将导致List of Customer代表数据库记录的对象。该列表现在独立于用于从数据库获取结果的查询,尽管链接记录在Customer仍然需要从数据库中获取对象。

然后当你这样做时:

List<Customer> FilteredCustomers = (from c in Customers where c.id == 1c).ToList();

这不是对数据库进行操作,而是对上一条语句返回的内存中的结果进行操作。在这种情况下,您将不会多次查询数据库。

在哪里does影响绩效是指当你有一个IQueryable你调用的对象ToList直接上多次。每次致电ToList on an IQueryable将导致对数据库的调用,并在后台进行所有伴随的对象跟踪等。一般来说,这是您想要避免的事情,尽管如果查询选择的记录总数很大并且过滤器提取数据的小子集,则在枚举结果之前对查询进行额外过滤可能会带来更好的性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多次调用ToList会影响性能吗? 的相关文章

随机推荐