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

    感谢您的阅读~

  • 相关阅读:
    Sublime安装package control的操作
    Sublime的简单操作
    C# 泛型方法
    C# 数组的讲解(ArrayList 与List的区别)
    免费的天气API
    bootstrapValidator的验证
    sqlServer 多行合并为一行
    bootstrap的安装注意
    SQL数据库中把一个表中的数据复制到另一个表中
    JavaScript的误区
  • 原文地址:https://www.cnblogs.com/yang-fei/p/7422453.html
Copyright © 2011-2022 走看看