zoukankan      html  css  js  c++  java
  • Linq to SQL实现链接加条件查询

    需要显示出所有的会员信息(即MemberInfo),排序要求按照会员排序表(MemberSort)中会员类型(MemberType)为0的SortNumber列进行排序。可以总结为三条:1.需要显示出所有的会员信息;2.按照会员排序表中的SortNumber列进行排序;3.只按照会员排序表中会员类型为0的会员进行排序。

      表结构及相关测试数据脚本:

    {12568658288120}createtable MemberInfo
    (
        MemberID
    int,
        MemberName
    nvarchar(50)
    )
    createtable MemberSort
    (
        MemberId
    int,
        SortNumber
    int,
        MemberType
    int
    )
    insertinto MemberInfo values (1,'A')
    insertinto MemberInfo values (2,'B')
    insertinto MemberInfo values (3,'C')
    insertinto MemberInfo values (4,'D')
    insertinto MemberInfo values (5,'E')

    insertinto MemberSort values (1,5,0)
    insertinto MemberSort values (2,4,0)
    insertinto MemberSort values (3,3,1)

    --Drop table MemberInfo
    --
    Drop table MemberSort

      采用传统的SQL方式查询代码:

    {12568658288121}SELECT[t0].[MemberID], [t0].[MemberName]
    FROM[dbo].[MemberInfo]AS[t0]
    LEFTOUTERJOIN[dbo].[MemberSort]AS[t1]ON ([t1].[MemberType]=0) AND ([t0].[MemberID]=[t1].[MemberID])
    ORDERBY
        (
    CASE
            
    WHEN[t1].[SortNumber]ISNOTNULLTHEN[t1].[SortNumber]
            
    ELSE9999
        
    END)

      希望在Linq to SQL中获得同样的支持。

      首次尝试失败的代码:

    {12568658288122}var data =from m in db.MemberInfo
                              
    join s in db.MemberSort on m.MemberID equals s.MemberID && s.MemberType ==0
                              
    into x
                              
    from cx in x.DefaultIfEmpty()
                               orderby cx.SortNumber.HasValue ? cx.SortNumber.Value :
    9999
                              
    select m;

      经过修正代码如下:

    {12568658288123}var data =from m in db.MemberInfo
                              
    join s in db.MemberSort on m.MemberID equals s.MemberID
                              
    into x
                              
    from cx in x.Where(d => d.MemberType ==0).DefaultIfEmpty()
                               orderby cx.SortNumber.HasValue ? cx.SortNumber.Value :
    9999
                              
    select m;

      关键语句即from cx in x.Where(d=>d.MemberType==0).DefaultEmpty(); 即为返回连接组合当中MemberType==0或不存在MemberType值的数据集合。

      

  • 相关阅读:
    .NET Core前后端分离快速开发框架(Core.3.0+AntdVue)
    关于框架
    什么是 https ?这应该是全网把 https 讲的最好的一篇文章了
    NET手撸绘制TypeScript类图——下篇
    及时发现问题,力争找到更好的解决办法,而不是得过且过
    一个命令永久禁用Win10驱动程序强制签名
    表达式的结果为true或false
    Parcel 搭建浏览器自动刷新的 非 SPA项目
    Gulp 搭建前端非SPA 项目, 修改文件浏览器自动刷新
    vue 里 this.$parent 作用
  • 原文地址:https://www.cnblogs.com/mistor/p/2334618.html
Copyright © 2011-2022 走看看