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值的数据集合。

      

  • 相关阅读:
    关于解决Python中requests模块在PyCharm工具中导入问题
    arcgis javascript api 事件的监听及移除
    零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)
    python 爬取全量百度POI
    Webpack安装使用总结
    开源协议之间的区别
    npm指令后缀
    nrm的作用(及安装)
    Vuejs中关于computed、methods、watch的区别
    VUE参考---watch、computed和methods之间的对比
  • 原文地址:https://www.cnblogs.com/mistor/p/2334618.html
Copyright © 2011-2022 走看看