哪些LINQ语句强制EntityFramework从数据库返回?我知道几个LINQ语句会导致EF计算结果并将结果从DB返回到内存。.ToList()是一个。谁有完整的声明清单?不确定....SingleOrDefault().Union()编辑:希望我能接受所有这些答案。大家好消息!这是一个长长的清单。它们归结为聚合所有任何平均值包含计数ElementAtElementAtOrDefaultEmptyFirstFirstOrDefaultLastLastOrDefaultLongCountMaxMinSequenceEqualSingleSingleOrDefaultSumToArrayToDictionaryToListToLookup,其余的是延迟流式执行或延迟非流式执行。根据你的问题,SingleOrDefault()是立即执行,而Union()是延迟流执行。任何返回具体对象或数据结构(Count、SumSingle、First、ToList、ToArray等)的东西都会立即被评估,所以SingleOrDefault肯定是SingleOrDefault。返回IQueryable(Select、GroupBy、Take)的任何内容都将被延迟(以便可以链接操作),因此Queryable.Union将被延迟。返回任何IEnumerable也将被延迟,但后续查询将在Linq-to-objects中完成,因此后续操作不会转换为SQL。(Empty是一个例外,因为没有任何东西可以延迟-它只返回一个空集合)来自MSDN,对一系列源元素执行聚合函数的查询必须首先迭代这些元素。此类查询的示例包括Count、Max、Average和First。它们在没有显式foreach语句的情况下执行,因为查询本身必须使用foreach才能返回结果。另请注意,这些类型的查询返回单个值,而不是IEnumerable集合。要强制任何查询立即执行并缓存其结果,您可以调用ToList或ToArray方法。对于EntityFramework,有一种简单的方法可以刷新您的记忆。实体框架具有由System.Data.Entity定义的所有此类方法的异步变体,因为异步对其他人没有意义,因为查询数据库的异步变体是异步执行的行为。因此,如果存在Async变体,它会访问数据库,否则不会。枚举或生成IEnumerable是部分情况:获取IEnumerable以获取其枚举器的行为(如发生在foreach块的开头)不会访问数据库,但第一个MoveNext()(立即发生,它确实命中了数据库,然后它继续从结果集中流式传输直到MoveNext()返回false(例如当foreach到达其“自然”结束时)或在此之前放置一个枚举器(例如当foreach被中止时)以上是C#学习教程:WhichLINQstatementsforceEntityFrameworktoreturnfromtheDB?所有内容分享,如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——这篇文章来自网络收藏,不代表站队,如涉及侵权,请点击右侧联系管理员删除。如需转载,请注明出处:
