does converting IQueryable to IEnumerable execute the query again?
在我的查询中,我需要返回
我知道
iQueryable是IEnumerable。没有转化,因此没有任何形式的工作在进行。
当您显式地或通过调用
另外,您确认过
一切都是关于延期执行。在尝试枚举之前,不会对可查询源(可能是数据库)执行任何操作。
换言之:
1 2 3 | var data=Repository.Find().AsEnumerable() /* The query is only actually performed AFTER here */ .ToList(); |
如果你的代码:
1 | var data=Repository.Find().ToList(); |
执行两次查询,这是因为您在find()方法中做了一些不正确的事情,这绝对不应该是这种情况。
1 | var data = Respository.Find(); |
应执行查询零次。
1 | var result = data.ToList(); // THIS is what should execute the query. |
把linq想象成一个"流",聚合函数就是一个"flush"。linq to db"流只能刷新一次。.aseNumerable(),.where(),……是准备查询的方法.tolist()、.first()、.max()是聚合但是如果你不调用聚合,那么你的LINQ结果就不会运行。它只有在被枚举时才开始工作。
前任
1 | var result = users.Select(usr => usr.Name); |
在这之前什么都不会发生
调用1个聚合
1 | result.First() |
或2个结果正在枚举
1 | result.ToList().ForEach(...) |
要回答您的问题-.find(),.aseNumerable()不是聚合函数