zoukankan      html  css  js  c++  java
  • 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);分页时

  • 相关阅读:
    How to create Ubuntu Image with Linaro Image Tools
    linux little tool
    Firefly-RK3288
    tensorflow 出现KeyError: 'tulips\8689672277_b289909f97_n.jpg'报错
    开发中涉及的框架与工具
    这三年被分布式坑惨了,曝光十大坑 【转载】
    C#动态编译及执行代码
    cron表达式可视化编辑页面
    AVPacket相关函数介绍
    ffmpeg 重要函数介绍
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5607522.html
Copyright © 2011-2022 走看看