Ø  前言

没有什么特别的,只是觉得 LINQ 的功能其实还是蛮强大的,所以简单记录下,算是工作笔记吧,有可能还能帮助到其他同学呢^_^。

Ø  下面主要使用了 C# 三元运算符实现实现 SQL 中的 CASE WHEN THEN 语句。

1)   C#

const string deliverDM = "派送宣传册", haveKPInfo = "获得KP信息", talkWithKP = "和KP沟通", trial = "产品试样", turnover = "下单成交";

var query = (from t1 in DataContext.CustomerVisitInfo

where t1.SaleUserId == salesUserId && (t1.VisitTime >= mbdt && t1.VisitTime <= medt)

group t1 by t1.VisitStatus into g1

select new

{

VisitStatusName = (

g1.Key == (int)VisitStates.DeliverDM ? deliverDM

: g1.Key == (int)VisitStates.HaveKPInfo ? haveKPInfo

: g1.Key == (int)VisitStates.TalkWithKP ? talkWithKP

: g1.Key == (int)VisitStates.Trial ? trial

: g1.Key == (int)VisitStates.Turnover ? turnover : "其他"),

CustomerCount = g1.Count()

}).ToList();

2)   生成SQL:

exec sp_executesql N'SELECT

[GroupBy1].[K1] AS [VisitStatus],

CASE WHEN (1 = [GroupBy1].[K1]) THEN N''派送宣传册'' WHEN (2 = [GroupBy1].[K1]) THEN N''获得KP信息'' WHEN (3 = [GroupBy1].[K1]) THEN N''和KP沟通'' WHEN (4 = [GroupBy1].[K1]) THEN N''产品试样'' WHEN (5 = [GroupBy1].[K1]) THEN N''下单成交'' ELSE N''其他'' END AS [C1],

[GroupBy1].[A1] AS [C2]

FROM ( SELECT

[Extent1].[VisitStatus] AS [K1],

COUNT(1) AS [A1]

FROM [dbo].[CustomerVisitInfo] AS [Extent1]

WHERE ([Extent1].[SaleUserId] = @p__linq__0) AND ([Extent1].[VisitTime] >= @p__linq__1) AND ([Extent1].[VisitTime] <= @p__linq__2)

GROUP BY [Extent1].[VisitStatus]

)  AS [GroupBy1]',N'@p__linq__0 bigint,@p__linq__1 datetime2(7),@p__linq__2 datetime2(7)',@p__linq__0=131,@p__linq__1='2017-05-01 00:00:00',@p__linq__2='2017-05-31 23:59:59'

Ø  思考:以上示例 THEN 中只是输出了常量字符串,也可以尝试输出其他语句结果,例如:嵌套子查询等。

LINQ to SQL 实现 CASE WHEN THEN 语句的更多相关文章

  1. wcf+linq to sql中关联查询返回数据问题

    前段时间准备采用wcf+nh框架开发sl程序,发现采用nh开发不适合我的中型.并且快速开发项目,所以综合考量了下,决定采用wcf+linq to sql . 但是此模式也有缺点,也是linq to s ...

  2. 年终巨献 史上最全 ——LINQ to SQL语句

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

  3. LINQ to SQL语句非常详细(原文来自于网络)

    LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...

  4. LINQ to SQL 语句(2)之 Select/Distinct

    LINQ to SQL 语句(2)之 Select/Distinct [1] Select 介绍 1 [2] Select 介绍 2 [3] Select 介绍 3 和  Distinct 介绍 Se ...

  5. LINQ to SQL语句大全

    LINQ to SQL语句大全     LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判 ...

  6. LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg (转)

    Select/Distinct操作符 适用场景:o(∩_∩)o… 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也 ...

  7. 【转】LINQ to SQL语句(1)之Where

    Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形 ...

  8. LINQ体验(18)——LINQ to SQL语句之视图和继承支持

    视图 我们使用视图和使用数据表类似,仅仅需将视图从"server资源管理器/数据库资源管理器"拖动到O/R 设计器上,自己主动能够创建基于这些视图的实体类.我们能够同操作数据表一样 ...

  9. 史上最全 ——LINQ to SQL语句

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

随机推荐

  1. 使用ssh tunnel 来做代理或跳板

    接前文 http://www.cnblogs.com/piperck/p/6188984.html  使用ssh config配置文件来管理ssh连接 前文说了如何配置自己的ssh config 来方 ...

  2. Python连接字符串用join还是+

    我们先来看一下用join和+连接字符串的例子 str1 = " ".join(["hello", "world"]) str2 = &quo ...

  3. 【刷题】LOJ 2863 「IOI2018」组合动作

    题目描述 你在玩一个动作游戏.游戏控制器有 \(4\) 个按键,A.B.X 和 Y.在游戏中,你用组合动作来赚金币.你可以依次按这些按键来完成一个组合动作. 这个游戏有一个隐藏的按键序列,可以表示为由 ...

  4. 自学Linux Shell12.2-test命令

    点击返回 自学Linux命令行与Shell脚本之路 12.2-test命令 if-then语句不能测试命令退出状态码之外的条件,test命令提供了在if-then语句中测试不同条件的途径. 如果tes ...

  5. BZOJ 3864 Hero meet devil 超详细超好懂题解

    题目链接 BZOJ 3864 题意简述 设字符集为ATCG,给出一个长为\(n(n \le 15)\)的字符串\(A\),问有多少长度为\(m(m \le 1000)\)的字符串\(B\)与\(A\) ...

  6. Android中用文件初始化sqlite 数据库(二)

    博 androidsqlite启动时数据库初始化  方法1已经讲述了一种初始化数据库的方法 它的数据库初始化不是用sql语句,而是用一个现成的sqlite的二进制文件进行直接copy到Android系 ...

  7. pthread_cond_wait() 函数的使用

    1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are us ...

  8. (转)Servlet的生命周期——初始化、运行、销毁全部过程

    背景:面试中很基础的一个问题,所以有必要好好整理一番. Servlet体系结构是建立在 Java 多线程机制上的,它的生命周期由 Web 容器负责. 当客户端第一次请求某个 Servlet 时,Ser ...

  9. 动态分配内存 new

    a=]; ;i<=n;i++) a[i]=]; 感觉比malloc好用. 动态初始化后,值并非全为0,注意!

  10. 解决invalid record found in VCF4 file (at least 8 tab-delimited fields expected)问题,批量修改空格改为制表格格式

    出现这种问题说明一般存在两个问题: 第一,vcf文件不足8个分割制表符,比如像如下文件: 为了解决这个问题,说明在做snp filter时候,需要提取至少8个制表符的字符串,比如,像如下文件所示: 第 ...