在 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/