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

    感谢您的阅读~

  • 相关阅读:
    Switch
    java 函数 运算符
    java 基本类型
    更新时电话查重
    微信公众平台发送模板消息时连发三遍的最简单解决办法
    Yii2.0 发送邮件时中文附件乱码的问题
    Yii2.0 发送文件
    Yii2.0 请求
    Yii2.0随笔 路由
    yii2.0 在save保存之前的操作(放在模型model文件内)
  • 原文地址:https://www.cnblogs.com/yang-fei/p/7422453.html
Copyright © 2011-2022 走看看