从网上收藏的复杂Linq语句写法

1、case when:

原型:

sql原型:

SELECT ProductID, Name, Color,

CASE

WHEN Color = 'Red' THEN StandardCost

WHEN Color = 'Black' THEN StandardCost + 10

ELSE ListPrice

END Price

FROM SalesLT.Product

Linq代码:

Products.Select(P => new

{

ID = P.ProductID,

Name = P.Name,

Color = P.Color,

Price = (P.Color == "Red" ? P.StandardCost : (P.Color == "Black" ? P.StandardCost + 10 : P.ListPrice))

});

2、where中使用case when

linq代码:

Products

.Where(P => (P.Color == "Red" ? (P.StandardCost > 100) : (P.Color == "Black" ? P.ListPrice > 100 : P.ListPrice == P.StandardCost)))

.Select(P => new

{

ID = P.ProductID,

Name = P.Name,

Color = P.Color,

StandardCost = P.StandardCost,

ListPrice = P.ListPrice

});

sql原型:

SELECT ProductID, Name, Color, StandardCost, ListPrice

FROM SalesLT.Product

WHERE (

(CASE

WHEN Color = 'Red' THEN

(CASE

WHEN StandardCost > 100 THEN 1

WHEN NOT (StandardCost > 100) THEN 0

ELSE NULL

END)

WHEN Color = 'Black' THEN

(CASE

WHEN ListPrice > 100 THEN 1

WHEN NOT (ListPrice > 100) THEN 0

ELSE NULL

END)

ELSE

(CASE

WHEN ListPrice = StandardCost THEN 1

WHEN NOT (ListPrice = StandardCost) THEN 0

ELSE NULL

END)

END)) = 1

3、group by中使用case when

linq代码:

Products.GroupBy(P => P.StandardCost > 1000? P.Color : P.SellStartDate.ToString())

sql原型:

-- Region Parameters

DECLARE @p0 Decimal(8,4) = 1000

-- EndRegion

SELECT [t1].[value] AS [Key]

FROM (

SELECT

(CASE

WHEN [t0].[StandardCost] > @p0 THEN CONVERT(NVarChar(MAX),[t0].[Color])

ELSE CONVERT(NVarChar(MAX),[t0].[SellStartDate])

END) AS [value]

FROM [SalesLT].[Product] AS [t0]

) AS [t1]

GROUP BY [t1].[value]

4、单表的查询

var query = from tc in db.tbClass

where tc.ClassID == "1"

//查询表tbClass

select new {

ClassID=tc.ClassID,

ClassName=tc.ClassName

5、多表内连接查询

var query = from s in db.tbStudents

join c in db.tbClass on s.ClassID equals c.ClassID

where s.ClassID == 3

select new

{

ClassID = s.ClassID,

ClassName = c.ClassName,

Student = new

{

Name = s.Name,

StudentID = s.StudentID

}

};

6、外连接

var query = from s in db.tbStudents

join c in db.tbClass on s.ClassID equals c.ClassID into tbC

from tbCw in tbC.DefaultIfEmpty()

where s.ClassID == 3

select new

{

ClassID = s.ClassID,

ClassName = tbCw.ClassName,

Student = new

{

Name = s.Name,

StudentID = s.StudentID

}

};

7、多表关联

listUser = (from u in dbcontext.t_user

join g in dbcontext.t_grade on u.gradeID equals g.gradeID

join s in dbcontext.t_states on u.state equals s.statesID

join c in dbcontext.t_character on u.levelID equals c.levelID

select new userModel()

{

userID=u.userID,

userName=u.userName,

userGrade=g.userGrade,

userStates=s.userSates,

userLevel=c.userLevel,

totalMcoin=u.totalMcoin

}).ToList();

————————————————
版权声明:本文为CSDN博主「xjzdr」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xjzdr/article/details/81179290

复杂Linq语句写法的更多相关文章

  1. C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法

    https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) ...

  2. LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别

    LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: s ...

  3. 动态拼接linq 使用Expression构造动态linq语句

    最近在做动态构造linq语句,从网上找了很多,大多数,都是基于一张表中的某一个字段,这样的结果,从网上可以搜到很多.但如果有外键表,需要动态构造外键表中的字段,那么问题来了,学挖掘机哪家强?哦,不是, ...

  4. [转]在Entity Framework中使用LINQ语句分页

    本文转自:http://diaosbook.com/Post/2012/9/21/linq-paging-in-entity-framework 我们知道,内存分页效率很低.并且,如果是WebForm ...

  5. Linq语句基础

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg

    在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...

  7. python最简洁的条件判断语句写法

    这篇文章主要介绍了Python返回真假值(True or False)小技巧,本文探讨的是最简洁的条件判断语句写法,本文给出了两种简洁写法,需要的朋友可以参考下 如下一段代码: def isLen(s ...

  8. MVC4数据访问EF查询linq语句的时候报错找不到表名问题

    一天做项目的时候遇到这样的问题,MVC4用EF访问数据查询用linq语句的时候报错找不到表名:报错如下图: 研究了几种情况,最后还是没有找到正真的问题所在,不过可能是和路由解析问题有关,暂时还没有进行 ...

  9. discuz 万能SQL查询调用语句写法

    首先在最底层source\class\table写入底层安全调用文件例如:table_common_friendlink.php 代码: <?php /** * [Discuz!] (C)200 ...

随机推荐

  1. NX二次开发-NX+VS写代码设断点调试技巧

    在做NX二次开发的时候写完代码,编译可以通过,但是执行的时候却没有反应,或者得到的结果不对,说明肯定有地方传值出错了.我在查找代码错误的时候有几种方法:1.uc1601打印函数输入和输出的值看对不对. ...

  2. POJ2226-Muddy Fields-二分图*

    目录 目录 思路: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 目录 题意:传送门  原题目描述在最下面.  一个nm的矩阵,有坑有草,可以用1x长度的木板盖住坑,但不能盖到草. ...

  3. Nutz框架的优点

    轻量级 -- jar文件共约1Mb -- 针对JDBC的薄封装,无缓存. 全面 -- 提供了Dao(ORM, SQL管理),Ioc, Aop, Mvc, Json解析等必要功能. 灵活 -- 各个部分 ...

  4. Devstack配置负载均衡,负载均衡版本V2

    本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...

  5. Codeforces 1163A - Eating Soup

    题目链接:http://codeforces.com/problemset/problem/1163/A 题意:n 只猫围成一圈,离开 m 只,最多剩下几组猫. 思路:当 n == m 即猫都离开时 ...

  6. 23-Ubuntu-文件和目录命令-查看文件内容-more 和 cat

    1. more---适合查看内容多的文件 格式: more 文件名 操作键 功能 空格键 显示手册页下一屏 Enter键 一次滚动手册页的一行 b 返回上一屏 f 前滚一屏 q 退出 例: more ...

  7. duboo注解使用详解

    一.背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行. 当越来越的的接口与实现类的增加后,duboo的xml配置会越来越多,为了防止 ...

  8. iOS开发系列-UIImageView的contentMode

    typedef NS_ENUM(NSInteger, UIViewContentMode) { UIViewContentModeScaleToFill, UIViewContentModeScale ...

  9. mysql 复制原理详解

    http://www.cnblogs.com/kristain/articles/4142970.html

  10. java字符串简单介绍

    String:String对象初始化之后不可变线程安全简单的字符串操作使用String效率更高 StringBuffer:StringBuffer对象初始化之后可改变线程安全频繁的字符串操作可以使用S ...