IEnumerable方式:

public IEnumerable<WebManageUsers> GetWebManageUsers(ISpecification<WebManageUsers> specification)
{
var linq = base.GetEntities(specification).AsQueryable()
.Include(i => i.WebManageUser_WebManageRoles)
.AsQueryable(); //include会增加链库操作
return linq;
}

解释成sql:
exec sp_executesql N'SELECT
[Project1].[ManageUserID] AS [ManageUserID],
[Project1].[LoginName] AS [LoginName],
[Project1].[Password] AS [Password],
[Project1].[RealName] AS [RealName],
[Project1].[Gender] AS [Gender],
[Project1].[Phone] AS [Phone],
[Project1].[Mobile] AS [Mobile],
[Project1].[Email] AS [Email],
[Project1].[AvatarUrl] AS [AvatarUrl],
[Project1].[QQ] AS [QQ],
[Project1].[MSN] AS [MSN],
[Project1].[Rtx] AS [Rtx],
[Project1].[Birthday] AS [Birthday],
[Project1].[Description] AS [Description],
[Project1].[DepartmentID] AS [DepartmentID],
[Project1].[CreateDate] AS [CreateDate],
[Project1].[UpdateDate] AS [UpdateDate],
[Project1].[Operator] AS [Operator],
[Project1].[Status] AS [Status],
[Project1].[IntroductionURL] AS [IntroductionURL],
[Project1].[WebSystemID] AS [WebSystemID],
[Project1].[C1] AS [C1],
[Project1].[ManageUserID1] AS [ManageUserID1],
[Project1].[ManageRoleID] AS [ManageRoleID],
[Project1].[CreateDate1] AS [CreateDate1]
FROM ( SELECT
[Extent1].[ManageUserID] AS [ManageUserID],
[Extent1].[LoginName] AS [LoginName],
[Extent1].[Password] AS [Password],
[Extent1].[RealName] AS [RealName],
[Extent1].[Gender] AS [Gender],
[Extent1].[Phone] AS [Phone],
[Extent1].[Mobile] AS [Mobile],
[Extent1].[Email] AS [Email],
[Extent1].[AvatarUrl] AS [AvatarUrl],
[Extent1].[QQ] AS [QQ],
[Extent1].[MSN] AS [MSN],
[Extent1].[Rtx] AS [Rtx],
[Extent1].[Birthday] AS [Birthday],
[Extent1].[Description] AS [Description],
[Extent1].[DepartmentID] AS [DepartmentID],
[Extent1].[CreateDate] AS [CreateDate],
[Extent1].[UpdateDate] AS [UpdateDate],
[Extent1].[Operator] AS [Operator],
[Extent1].[Status] AS [Status],
[Extent1].[IntroductionURL] AS [IntroductionURL],
[Extent1].[WebSystemID] AS [WebSystemID],
[Extent2].[ManageUserID] AS [ManageUserID1],
[Extent2].[ManageRoleID] AS [ManageRoleID],
[Extent2].[CreateDate] AS [CreateDate1],
CASE WHEN ([Extent2].[ManageUserID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
FROM [dbo].[WebManageUsers] AS [Extent1]
LEFT OUTER JOIN [dbo].[WebManageUser_WebManageRoles] AS [Extent2] ON [Extent1].[ManageUserID] = [Extent2].[ManageUserID]
WHERE (@p__linq__0 = 1) AND ([Extent1].[CreateDate] > (CASE WHEN (@p__linq__1 IS NULL) THEN @p__linq__2 ELSE @p__linq__1 END)) AND ([Extent1].[CreateDate] < (CASE WHEN (@p__linq__3 IS NULL) THEN @p__linq__4 ELSE @p__linq__3 END))
) AS [Project1]
ORDER BY [Project1].[ManageUserID] ASC, [Project1].[C1] ASC',N'@p__linq__0 bit,@p__linq__1 datetime2(7),@p__linq__2 datetime2(7),@p__linq__3 datetime2(7),@p__linq__4 datetime2(7)',@p__linq__0=1,@p__linq__1=NULL,@p__linq__2='0001-01-01 00:00:00',@p__linq__3=NULL,@p__linq__4='9999-12-31 23:59:59.9999999'

IQueryable方式:

   public IQueryable<WebManageUsers> GetWebManageUsers(ISpecification<WebManageUsers> specification)
{
var linq = base.GetEntities(specification).AsQueryable()
.Include(i => i.WebManageUser_WebManageRoles)
.AsQueryable(); //include会增加链库操作
return linq;
}
解释成sql:
exec sp_executesql N'SELECT
[Extent1].[ManageUserID] AS [ManageUserID],
[Extent1].[CreateDate] AS [CreateDate],
[Extent1].[RealName] AS [RealName]
FROM [dbo].[WebManageUsers] AS [Extent1]
WHERE (@p__linq__0 = 1) AND ([Extent1].[CreateDate] > (CASE WHEN (@p__linq__1 IS NULL) THEN @p__linq__2 ELSE @p__linq__1 END)) AND ([Extent1].[CreateDate] < (CASE WHEN (@p__linq__3 IS NULL) THEN @p__linq__4 ELSE @p__linq__3 END))',N'@p__linq__0 bit,@p__linq__1 datetime2(7),@p__linq__2 datetime2(7),@p__linq__3 datetime2(7),@p__linq__4 datetime2(7)',@p__linq__0=1,@p__linq__1=NULL,@p__linq__2='0001-01-01 00:00:00',@p__linq__3=NULL,@p__linq__4='9999-12-31 23:59:59.9999999'

以上说明:

IQueryable才是linq的延时加载
啥时候用:
1 结果集很大,返回的字段可能需要组装
2 使用 result = result.Skip(pageSize * (pageIndex - 1)).Take(pageSize);分页时

Linq 的IQueryable和IEnumerable方式的更多相关文章

  1. IQueryable和IEnumerable

    使用EF你必须知道这两个的区别,可以帮助我们的提升性能. 表达树:Linq 表达 ①IQueryable和IEnumerable IQueryable 延时执行:扩展方法接受的是Expression( ...

  2. LINQ查询中的IEnumerable<T>和IQueryable<T>

    LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryab ...

  3. 编写高质量代码改善C#程序的157个建议——建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>

    建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:E ...

  4. C# IEnumerable与IQueryable ,IEnumerable与IList ,LINQ理解Var和IEnumerable

    原文:https://www.cnblogs.com/WinHEC/articles/understanding-var-and-ienumerable-with-linq.html 使用LINQ从数 ...

  5. IQueryable和IEnumerable,IList的区别

    IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution) IQueryable和IEnumerabl ...

  6. C# IQueryable和IEnumerable的区别

    在使用EF查询数据的时候,我们常用的查询数据方式有linq to sql,linq to object, 查询返回的结果有两种类型:IQueryable.IEnumerable,两者内部的处理机制是完 ...

  7. C#编程之IList<T>、List<T>、ArrayList、IList, ICollection、IEnumerable、IEnumerator、IQueryable 和 IEnumerable的区别

    额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别...  在C#中 ...

  8. IQueryable 和 IEnumerable

    IQueryable 和 IEnumerable 其实,对于上面的即有过虑又有排序的条件查询Linq语句,EF是读取数据库中整个Books表中的数据到内存,还是根据Linq查询语句智能的生成SQL再执 ...

  9. IQueryable和IEnumerable以及AsEnumerable()和ToList()的区别

    注意:本文背景为 Linq to sql .文中ie指代IEnumerable,iq指代IQueryable. IQueryable 和 IEnumerable 的区别 IQueryable 延时执行 ...

随机推荐

  1. Nginx、SSL双向认证、PHP、SOAP、Webservice、https

    本文是1:1模式,N:1模式请参见新的一篇博客<SSL双向认证(高清版)> ----------------------------------------------------- 我是 ...

  2. asp.net基础

    这篇主要讲述以下基础知识: Request对象 Response对象 Server对象 Cookie对象 Application对象 ViewState对象 <%%>与<%=%> ...

  3. HNU 13375 Flowery Trails (spfa最短路)

    求最短路径覆盖的全部边权值和. 思路:分别从起点和终点两次求最短路,再比较两个点到起点的距离和他们之间的权值相加和是否等于最短路径. 这题很好 #include <cstring> #in ...

  4. Storm系列(四)Topology提交校验过程

    功能:提交一个新的Topology,并为Topology创建storm-id(topology-id),校验其结构,设置必要的元数据,最后为Topology分配任务. 实现源码: 1  ); Conf ...

  5. 【Java基础】Java多线程之线程组和线程池

    在上一篇文章中,讲述了线程的基本概念和用法,这里将继续讲述线程组和线程池的一些东西. 线程组:java.lang.ThreadGroup 1. 线程组的介绍 线程组表示一个线程的集合.此外,线程组也可 ...

  6. HW4.4

    public class Solution { public static void main(String[] args) { final double KILOMETERS_PER_MILE = ...

  7. 动态规划:最长上升子序列(LIS)

    转载请注明原文地址:http://www.cnblogs.com/GodA/p/5180560.html 学习动态规划问题(DP问题)中,其中有一个知识点叫最长上升子序列(longest  incre ...

  8. storm的特性

    storm的特性 Storm 是一个开源的分布式实时计算系统,可以简单.可靠地处理大量的数据流. Storm支持水平扩展,具有高容错性,保证每个消息都会得到处理,而且处理速度很快(在一个小集群中,每个 ...

  9. 简单计算器 (c语言课程设计)

    可以实现简单的加减乘除四则运算 #include<stdio.h> #include<string.h> #define MAX 10100 int main() { int ...

  10. Zabbix lld发现磁盘监控

    一.软件版本 操作系统:CentOS-6.5-x86_64 zabbix版本:3.0.3 二.脚本编写: 1.python版本: #!/usr/bin/env python import json i ...