如果我有一个返回AsEnumerable的函数,它是否缓存所有结果?
本文关键字:缓存 是否 结果 有一个 返回 AsEnumerable 函数 如果 | 更新日期: 2023-09-27 18:01:21
假设我有一个如下方法:
public IEnumerable<T> GETEVERYTHING()
{
return _db.AsEnumerable();
}
然后在我的代码中调用方法
GETEVERYTHING().Where(w => w.Active == true);
它是从数据库获取所有内容,缓存它,然后过滤结果还是在调用数据库之前过滤结果?例如:它会调用数据库中的SELECT * FROM table
还是SELECT * FROM table WHERE Active = 1
?
很抱歉我的英语不好,任何帮助都将是感激的。
呼叫
return _db.AsEnumerable();
没有真正执行查询,因为它是IQueryable,继承了IEnumerable,所以什么也没发生。然而,调用.ToList()将强制执行,如果有帮助的话
编辑:正如在注释中指出的那样,在大多数情况下,调用where方法本身不应该强制执行。
AsEnumerable是将linq(将由查询提供程序传递)和linq(将作为委托执行)分开的标记。如果你写db.Where(w=>w.IsActive==true).AsEnumerable().Where(w=>w.IGood==true)
,查询的第一部分将被转移到SQL代码:
select * from dbs where IsActive =1
但第二部分(.Where(w=>w.IGood==true)
)将在c#代码中作为委托执行,当您调用ToArray(), ToList()或迭代foreach时。