Linq to SQL实现链接加条件查询

ZDNet软件频道 时间:2009-10-30 作者:技术频道整理 | IT168网站 我要评论()
本文关键词:SQL SQL Server
需要显示出所有的会员信息(即MemberInfo),排序要求按照会员排序表(MemberSort)中会员类型(MemberType)为0的SortNumber列进行排序。可以总结为三条:1.需要显示出所有的会员信息;2.按照会员排序表中的SortNumber列进行排序;3.只按照会员排序表中会员类型为0的会员进行排序。

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

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

  createtableMemberInfo

  (

  MemberID int,

  MemberName nvarchar(50)

  )createtableMemberSort

  (

  MemberId int,

  SortNumber int,

  MemberType int)insertintoMemberInfo values(1,'A')insertintoMemberInfo values(2,'B')insertintoMemberInfo values(3,'C')insertintoMemberInfo values(4,'D')insertintoMemberInfo values(5,'E')insertintoMemberSort values(1,5,0)insertintoMemberSort values(2,4,0)insertintoMemberSort values(3,3,1)--Drop table MemberInfo--Drop table MemberSort

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

  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中获得同样的支持。

  首次尝试失败的代码:

  vardata =fromm indb.MemberInfo

  joins indb.MemberSort onm.MemberID equals s.MemberID &&s.MemberType ==0 intox

  fromcx inx.DefaultIfEmpty()

  orderby cx.SortNumber.HasValue ? cx.SortNumber.Value : 9999 selectm;

  经过修正代码如下:

  vardata =fromm indb.MemberInfo

  joins indb.MemberSort onm.MemberID equals s.MemberID

  intox

  fromcx inx.Where(d =>d.MemberType ==0).DefaultIfEmpty()

  orderby cx.SortNumber.HasValue ? cx.SortNumber.Value : 9999 selectm;

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


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134