C# 扩展方法类型

标签 c# .net extension-methods ienumerable iqueryable

在 C# 中,有两组扩展方法(例如 Where)在 IEnumerable 和 IQueryable 之上工作。其中哪些用于操作内存中的对象,哪些用于处理数据库。?请帮忙

最佳答案

IEnumerable<T>.Where 方法 extension.which 接受 Func<TSource, bool> predicate范围,
强制过滤发生在内存中。
从数据库中查询数据时,IEnumerable执行 select query在服务器端,
在客户端加载内存中的数据,然后过滤数据。
对于IEnumerable<T>情况下,它将是 LINQ-to-object ,这意味着与原始查询匹配的所有对象都必须从数据库加载到内存中。IEnumerable适用于查询List、Array等内存集合中的数据。

IQueryable<T>.Where 方法扩展,接受 Expression<Func<TSource, bool>> predicate范围。
请注意,这是一个表达式,而不是一个委托(delegate),它允许它将 where 条件转换为
数据库条件。
从数据库中查询数据时,IQueryable执行 select query在带有所有过滤器的服务器端。
区别在于 IQueryable<T>是允许 LINQ-to-SQL (LINQ.-to-anything) 工作的接口(interface)。
因此,如果您进一步细化您对 IQueryable<T> 的查询,如果可能,该查询将在数据库中执行。IQueryable适用于从内存外(如远程数据库、服务)集合中查询数据。

关于C# 扩展方法类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475873/

相关文章:

c# - 当前上下文中不存在变量 C#

c# - 订阅/取消订阅(添加/删除)扩展方法内的事件

c# - 如何在不启动任务的情况下构建任务?

c# - EF 4.0 - 加载导航属性的导航属性

c# - 在 C# 中添加不可见的图像水印?

c# - C# Server.URLEncode 的 JavaScript 等价物是什么?

php - 为 PHP 启用 zip 扩展

c# - 扩展方法未设置值

c# - 链接按钮动态显示 GridView asp.net

c# - 在 Accord.Net 中如何使用 One-Class SVM 进行异常检测?