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的处理能力。

    感谢您的阅读~

  • 相关阅读:
    找回感觉的练习
    第四次博客作业-结对项目
    zookeeper启动脚本
    docker自己制作centos7-jdk1.8-tomcat8
    Docker运行springboot的项目
    从list中模糊查询字符串
    Java实现文件下载
    hadoop的HA集群搭建
    oauth2 feign 报401的错误
    SpringBoot mybatis 自定义分页插件 注解版
  • 原文地址:https://www.cnblogs.com/yang-fei/p/7422453.html
Copyright © 2011-2022 走看看