zoukankan      html  css  js  c++  java
  • [C#] IEnumerable vs IQueryable

    这篇博客将介绍IEnumerable和IQueryable之间的区别。

    1. IQueryable是继承自IEnumerable接口的。所以IEnumerable能做的,IQueryable都能做。

    2. 先看代码,然后再讲两者之间的区别。

        using (NerdDinnerDataContext context = 
            new NerdDinnerDataContext())
        {
            IEnumerable<Dinner> dinners = context.Dinners;
    
            IEnumerable<Dinner> filters = dinners.Where(d => d.DinnerID > 0).ToList();
        }

    这段代码是去查询并找出DinnerID>0的所有Dinner。通过SQL Server Profiler可以看出,Where后面的过滤并没有在SQL中执行,而是将所有的Dinner集合返回到Client端,然后再进行Filter操作的。

    下面将IEnumerable替换成IQueryable

        using (NerdDinnerDataContext context = 
            new NerdDinnerDataContext())
        {
            IQueryable<Dinner> dinners = context.Dinners;
    
            IEnumerable<Dinner> filters = dinners.Where(d => d.DinnerID > 0).ToList();
        }

    通过SQL Server Profiler可以看到,数据集的过滤是在DB一层执行的。

    IQueryable与IEnumerable的区别在于前者的filter逻辑在DB端执行,后者的filter逻辑在Client端执行。

    结论:

    如果数据集合均为内存数据,建议使用IEnumerable。

    如果数据是从数据库中获取,建议使用IQueryable,这样可以降低网络流量和充分利用SQL Server的处理能力。

    感谢您的阅读~

  • 相关阅读:
    springboo 添加logback日志
    logback配置日志输出
    认知升级:提升理解层次的NLP思维框架
    2019第29周日
    《如何有效社交》晨读笔记
    控制论模型&心流模型&波模型
    数学中常见的思维模型
    分布式服务跟踪系统
    Spring Cloud Sleuth
    微服务调用跟踪
  • 原文地址:https://www.cnblogs.com/yang-fei/p/7422453.html
Copyright © 2011-2022 走看看