Linq 的IQueryable和IEnumerable方式
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方式的更多相关文章
- IQueryable和IEnumerable
使用EF你必须知道这两个的区别,可以帮助我们的提升性能. 表达树:Linq 表达 ①IQueryable和IEnumerable IQueryable 延时执行:扩展方法接受的是Expression( ...
- LINQ查询中的IEnumerable<T>和IQueryable<T>
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryab ...
- 编写高质量代码改善C#程序的157个建议——建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T>
建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:E ...
- C# IEnumerable与IQueryable ,IEnumerable与IList ,LINQ理解Var和IEnumerable
原文:https://www.cnblogs.com/WinHEC/articles/understanding-var-and-ienumerable-with-linq.html 使用LINQ从数 ...
- IQueryable和IEnumerable,IList的区别
IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution) IQueryable和IEnumerabl ...
- C# IQueryable和IEnumerable的区别
在使用EF查询数据的时候,我们常用的查询数据方式有linq to sql,linq to object, 查询返回的结果有两种类型:IQueryable.IEnumerable,两者内部的处理机制是完 ...
- C#编程之IList<T>、List<T>、ArrayList、IList, ICollection、IEnumerable、IEnumerator、IQueryable 和 IEnumerable的区别
额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别... 在C#中 ...
- IQueryable 和 IEnumerable
IQueryable 和 IEnumerable 其实,对于上面的即有过虑又有排序的条件查询Linq语句,EF是读取数据库中整个Books表中的数据到内存,还是根据Linq查询语句智能的生成SQL再执 ...
- IQueryable和IEnumerable以及AsEnumerable()和ToList()的区别
注意:本文背景为 Linq to sql .文中ie指代IEnumerable,iq指代IQueryable. IQueryable 和 IEnumerable 的区别 IQueryable 延时执行 ...
随机推荐
- HDU5654xiaoxin and his watermelon candy 离线+树状数组
题意:bc 77div1 d题(中文题面),其实就是询问一个区间有多少不同的三元组,当然这个三元组要符合条件 分析(先奉上官方题解) 首先将数列中所有满足条件的三元组处理出来,数量不会超过 nn个. ...
- ActiveMQ的安全机制使用及其源代码分析 [转]
ActiveMQ是目前较为流行的一款开源消息服务器.最近在项目开发中,需要为ActiveMQ开发基于IP的验证和授权机制,因此,对ActiveMQ的安全机制进行了了解,以下将介绍ActiveMQ的安全 ...
- Kafka系列(一)安装和配置说明
单机模式 修改kafak安装文件中 .../kafka_2.9.2-0.8.1.1/config 下面的server.properties 配置文件 1.broker.id=0 [默认不用修改,该 ...
- Could not load db driver class: com.mysql.jdbc.Driver解决方法
14/03/26 22:43:24 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could ...
- HDOJ-ACM1023(JAVA)
题意:输入栈的大小,输出可能的出栈顺序的个数. 这道题,如果做了1022,那就只要在上面改改就行了, 第一想法是加上全排列-----结果是正确的,但是绝对会超时 验证性的实现了:(Time Limit ...
- SAP 使用SQL Trace(ST05)
SAP 使用SQL Trace(ST05) SAP R/3 提供标准ABAP SQL 跟踪工具.使用T-Code:ST05 可以进入追踪设定画面: 在Trace Modes 区域中选 ...
- 【Hibernate】--一对一关联、联合主键
一.数据模型 1.学生信息模型(编号.名称.身份信息) public class Student implements java.io.Serializable{ private static fin ...
- [USACO10MAR]伟大的奶牛聚集
[USACO10MAR]伟大的奶牛聚集 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会. 每个奶牛居住在 N(1<=N& ...
- bootstrap-table对前台页面表格的支持
1.bootstrap-table是在bootstrap的基础上面做了一些封装,所以在使用bootstrap-table之前要导入的js和css有 1)基本的还是jQuery <script t ...
- 理解C# Attribute
1.Attribute与Property Attribute是特性,Property是属性. 2.Attribute与注释 注释:是给程序员看的,编译的时候会去掉这些信息,也就是说,程序集中没有注释的 ...