gpt4 book ai didi

c# - IEnumerable Where 和 IQueryable Where 扩展方法的区别

转载 作者:行者123 更新时间:2023-11-30 19:02:37 32 4
gpt4 key购买 nike

有什么区别

public static IEnumerable<TSource> Where<TSource>
(this IEnumerable<TSource> source, Func<TSource, bool> predicate)

public static IQueryable<TSource> Where<TSource>
(this IQueryable<TSource> source,
Expression<Func<TSource, bool>> predicate)

两种方法都可以以相同的方式接受 lambda 表达式。

List<string> fruits =
new List<string> { "apple", "passionfruit", "banana", "mango",
"orange", "blueberry", "grape", "strawberry" };
IEnumerable<string> query = fruits.Where(fruit => fruit.Length < 6);

为什么存在委托(delegate)函数和委托(delegate)函数的表达式?我必须关心它吗?

最佳答案

IEnumerable 只是 C# 项的序列。 SelectIEnumerable 版本实际上只是在 C# 中迭代​​输入 IEnumerable 中的项目,针对委托(delegate)函数测试它们,并产生那些匹配的。

然而,IQueryable 可以表示例如SQL 表中的项目。 (或许多其他类型的数据源,但 SQL 可能是最常见的。)SelectIQueryable 版本可以将表达式转换为 SQL 查询的一部分(或类似的),并将决定返回哪些项目的负担传递给 SQL 服务器(或类似服务器)。

您实际上不必担心这种区别 - LINQ 可以为您隐藏所有这些细节。如果您要查询 C# 对象列表,它将使用 IEnumerable 版本;如果您通过 Linq-to-SQL 查询 SQL,它将使用 IQueryable 版本。

关于c# - IEnumerable<TSource> Where 和 IQueryable<TSource> Where 扩展方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11136382/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com