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

    感谢您的阅读~

  • 相关阅读:
    POSIX、XNU
    面向切面编程
    盗链
    django restframwork教程之Request和Response
    django restframework 教程之Serialization(序列化)
    Django restframwork
    saltstack远程执行命令.md
    saltstack安装
    django实现瀑布流、组合搜索、阶梯评论、验证码
    django文件上传和序列化
  • 原文地址:https://www.cnblogs.com/yang-fei/p/7422453.html
Copyright © 2020-2023  润新知