首页 > 解决方案 > C# 扩展方法类型

问题描述

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

标签: c#.netextension-methodsienumerableiqueryable

解决方案


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适用于从内存外(如远程数据库、服务)集合中查询数据。


推荐阅读