【问题标题】:MVC Core IEnumerable Advantages over IQueryable [closed]MVC Core IEnumerable 优于 IQueryable [关闭]
【发布时间】:2018-09-05 07:17:25
【问题描述】:

如果 IQueryable 具有 IEnumerable 的所有功能,但允许附加功能,为什么还要使用 IEnumerable?

IEnumerable 与 IQueryable 相比有哪些优势?

在这里阅读所有内容,仍然找不到好处:

What is the difference between IQueryable and IEnumerable?

IEnumerable Vs IQueryable

【问题讨论】:

    标签: asp.net-core ienumerable iqueryable


    【解决方案1】:

    注意2点

    1. IEnumerable<> 只定义了一个方法GetEnumerator(),这意味着在.NET 程序中立即枚举(执行查询)。而IQueryable<> 有表达式和查询提供者,这意味着IQueryable<> 只是IEnumerable<> 的准备,它必须通过调用GetEnumerator() 作为正常的IEnumerable<> 来执行(将查询和结果发回.NET完成外部查询时的程序)

    2. IEnumerable 的 LINQ 扩展方法采用 Func<>(delegates) 参数,表示要在当前 .NET 程序中执行的 C# 函数,但 IQueryable 采用 Expression<Func<>> 参数,表示这些选择器或谓词被密封为表达式,可能(实际上)被翻译成外部命令,例如 SQL 查询,而不是像普通的 C# 代码那样编译和执行。

    3. 许多IQueryable<> 查询提供程序为其指定的操作扩展了额外的查询功能。使用哪个取决于实际的查询目标。

    结论,IEnumerable<>IQueryable<>有不同的用法,IEnumerable<>用于内部对象查询,IQueryable<>用于外部资源查询

    【讨论】:

    • 这个答案是一个比较;问题又来了,IEnumerable 的优势是什么?如果 IQueryable 具有 IEnumerable 的所有优点,但允许更多功能,为什么还要使用 IEnumerable? IEnumerable 的优势是什么? CPU 占用内存少吗?
    • IEnumerable 接受函数参数,并且可以直接调用函数,您可以在 lambda 表达式上使用 {} 指定多个语句,或者只是将方法传递给 linq。而 IQueryable 只接受表达式,这意味着您可以只将一个简单的值表达式传递给 linq,而不能使用 {}、psssing 方法、外部调用或其他一些您可以用 c# 代码做的事情,因为提供者将所有内容都视为代码所以它必须将你所有的表达式编译成各种用法,并且可能(实际上)不支持你所有的复杂表达式
    • 是不是更像是另一种写法,ienumerable 函数 vs iqueryable 表达式,只是想定位优势
    • 您不会从中受益。他们正在解决不同的问题,并且永远无法通过优势进行比较
    • 平底锅是用来做饭的,盘子是用来吃饭的,它们的形状相似但用途不同,你永远不会想知道为什么用盘子吃饭比用平底锅更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 2011-06-09
    • 2021-10-26
    • 1970-01-01
    • 2014-11-09
    相关资源
    最近更新 更多