SQL连接中加条件查询的LINQ表达式写法[转]

摘要:
问题描述:表结构和相关测试数据脚本如下所示:createtableMemberInfo createtableMemberSort插入MemberInfo值插入MemberInfovalue插入MemberInfovalues插入MemberInfoValue插入MemberInfovalues插入MemberInfo value插入MemberSort值插入MemberSortvalues插入MemberSortvalues插入到MemberSortvvalues--DroptableMemberInfo--DroptableMemberSort现在具有此功能。另一个要求是显示所有成员信息的信息,但需要根据成员排序表中成员类型0的SortNumber列进行排序。

为了提高开发效率,公司的的开发大量采用LINQ To SQL进行开发  在这里把项目中遇上的问题和大家分享一下。(即LINQ to sql 连接加条件查询的问题)  问题描述:  表结构以及相关测试数据脚本如下:

为了提高开发效率,公司的的开发大量采用LINQ To SQL进行开发
  在这里把项目中遇上的问题和大家分享一下。(即LINQ to sql 连接加条件查询的问题)
  问题描述:
  表结构以及相关测试数据脚本如下:
  create table MemberInfo
  (
  MemberID int,
  MemberName nvarchar(50)
  )
  create table MemberSort
  (
  MemberId int,
  SortNumber int,
  MemberType int
  )
  insert into MemberInfo values (1,’A’)
  insert into MemberInfo values (2,’B’)
  insert into MemberInfo values (3,’C’)
  insert into MemberInfo values (4,’D’)
  insert into MemberInfo values (5,’E’)
  insert into MemberSort values (1,5,0)
  insert into MemberSort values (2,4,0)
  insert into MemberSort values (3,3,1)
  --Drop table MemberInfo
  --Drop table MemberSort
  现在有这样一个需求,就是需要显示出所有的会员信息(即MemberInfo)的信息,但排序需按照会员排序表(MemberSort)中会员类型(MemberType)为0的SortNumber列进行排序。
  听起来有点绕哈,分解一下
  1.需要显示出所有的会员信息;
  2.按照会员排序表中的SortNumber列进行排序;
  3.只按照会员排序表中会员类型为0的会员进行排序;
  内容清楚了,采用传统SQL方式查询,实现代码为
  SELECT [t0].[MemberID], [t0].[MemberName]
  FROM [dbo].[MemberInfo] AS [t0]
  LEFT OUTER JOIN [dbo].[MemberSort] AS [t1] ON ([t1].[MemberType] =0) AND 
  ([t0].[MemberID] = [t1].[MemberID])
  ORDER BY 
  (CASE 
  WHEN [t1].[SortNumber] IS NOT NULL THEN [t1].[SortNumber]
  ELSE 9999
  END)
  我们也希望在LINQ TO sql当中获取同样的支持
  即这样表达
  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;
  但很不幸报错了。哎难道MS又开我们的玩笑,当时为了项目进度,有同事把其实现方式先换成了SQL方式实现。
  后来几经周折,终于找到了答案
  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值的数据集合。
  问题解决了,希望可以让朋友们少走弯路,遇到类似的问题可以很容易得到解决。
来自:http://www.51edu.com/it/2009/0328/article_16391.html

免责声明:文章转载自《SQL连接中加条件查询的LINQ表达式写法[转]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux加固jQuery上传预览图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

.Net多线程编程—Parallel LINQ、线程池

Parallel LINQ 1 System.Linq.ParallelEnumerable 重要方法概览: 1)public static ParallelQuery<TSource> AsParallel<TSource>(this IEnumerable<TSource> source);启用查询的并行化 2)pub...

Linq to DataSet

Linq to DataSet将Linq与ADO.NET集成,通过ADO.NET获取数据,然后通过Linq进行查询,从而实现对数据的复杂查询,Linq to DataSet可以理解为通过Linq对DataSet中保存的数据进行查询,一般den为以下几个步骤: 1.获取DataSet或DataTable数据源,Linq to DataSet通过Linq查询Da...

Linq to sql学习之查询句法

select 描述:查询顾客的公司名、地址信息 查询句法: var构建匿名类型1 =fromcinctx.Customers selectnew { 公司名= c.CompanyName, 地址= c.Address }; 对应SQL: SELECT [t0].[CompanyName], [t0].[Address] FROM [dbo].[...

在LINQ查询中LINQ之Group By的用法

LINQ定义了大约40个查询操作符,如select、from、in、where、group 以及order by,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。Linq有很多值得学习的地方,这里我们主要介绍Linq使用Group By。 一、Linq对谁适用 linq的语法通过System.Linq下面的Enumerable类提...

Linq分批次,每组1000条

/// <summary> /// 分组插入每次插入1000 /// </summary> /// <param name="data"></param> /// <returns></returns>...

2017年12月14日 LinQ高级查&amp;&amp;Asp.net WebForm Asp.net MVC

LinQ的高级查询用法 开头:StartsWith()结尾:EndsWith()模糊:Contains()个数:Count最大值:Max(r => r.price)最小值:Min(r => r.price)平均值:Average(r => r.price)求和:Sum(r => r.price)升序:OrderBy(r => r...

最新文章