Dan*_*ira 4 c# linq entity-framework
当我使用此查询时,我不会从数据库中检索数据:
var query = db.Table.Where(x => x.id_category.HasValue).Select(x => x.Id);
Run Code Online (Sandbox Code Playgroud)
但如果我使用它,我将检索数据:
var dataRetrieved = query.ToList();
Run Code Online (Sandbox Code Playgroud)
其他哪些方法,例如ToList(),我可以强制检索数据?
LINQ 的工作原理是构建一系列查询命令,并等到最后可能的时刻执行它们。为了强制执行,您必须向查询询问“真实”数据,而不仅仅是获取它的步骤的描述。
根据这篇 MSDN 文章(重点是我的):
LINQ 查询总是在查询变量迭代时执行,而不是在创建查询变量时执行....
要强制立即执行不产生单例值的查询,您可以对查询或查询变量调用 ToList 方法、ToDictionary 方法或 ToArray 方法。...
您还可以通过在查询表达式之后立即放置 foreach 或 For Each 循环来强制执行,但是通过调用 ToList 或 ToArray 将所有数据缓存在单个集合对象中。