c# - C# 扩展方法类型
问题描述
在 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
参数。请注意,这是一个表达式,而不是一个委托,它允许它将 where 条件转换为数据库条件。
从数据库查询数据时,在服务器端IQueryable
执行所有过滤器。select query
不同IQueryable<T>
之处在于允许 LINQ-to-SQL(LINQ.-to-anything)工作的接口。因此,如果您在 上进一步细化查询IQueryable<T>
,则如果可能,该查询将在数据库中执行。
IQueryable
适用于从内存外(如远程数据库、服务)集合中查询数据。
推荐阅读
- tensorflow - 使用 GPU 功能在 tensorflow-hub 上使用 retrain.py 重新训练图像
- gcc - 如果从节中删除 NOLOAD,则从 elf 文件生成的二进制文件会爆炸
- python - pip install -e 选项需要 1 个参数
- ruby - Alexa 在 AudioPlayer.PlaybackStarted 意图后 4 秒触发 AudioPlayer.PlaybackStopped 意图
- angular - 角材料复选框和选项卡
- java - MongoDB/Morphia 中的参考
- mysql - 重新排序 mysql 表行,而不考虑时间顺序
- optaplanner - 没有entityClass,由于entityClassSet中有多个,无法自动推导
- jquery - 从 fullCalendar 中的“更多”弹出窗口拖动不起作用
- magento2 - 删除已添加到购物车的消息 Magento 2