复杂Linq语句写法
从网上收藏的复杂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语句写法的更多相关文章
- C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法
https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) ...
- LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别
LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别 在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: s ...
- 动态拼接linq 使用Expression构造动态linq语句
最近在做动态构造linq语句,从网上找了很多,大多数,都是基于一张表中的某一个字段,这样的结果,从网上可以搜到很多.但如果有外键表,需要动态构造外键表中的字段,那么问题来了,学挖掘机哪家强?哦,不是, ...
- [转]在Entity Framework中使用LINQ语句分页
本文转自:http://diaosbook.com/Post/2012/9/21/linq-paging-in-entity-framework 我们知道,内存分页效率很低.并且,如果是WebForm ...
- Linq语句基础
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg
在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...
- python最简洁的条件判断语句写法
这篇文章主要介绍了Python返回真假值(True or False)小技巧,本文探讨的是最简洁的条件判断语句写法,本文给出了两种简洁写法,需要的朋友可以参考下 如下一段代码: def isLen(s ...
- MVC4数据访问EF查询linq语句的时候报错找不到表名问题
一天做项目的时候遇到这样的问题,MVC4用EF访问数据查询用linq语句的时候报错找不到表名:报错如下图: 研究了几种情况,最后还是没有找到正真的问题所在,不过可能是和路由解析问题有关,暂时还没有进行 ...
- discuz 万能SQL查询调用语句写法
首先在最底层source\class\table写入底层安全调用文件例如:table_common_friendlink.php 代码: <?php /** * [Discuz!] (C)200 ...
随机推荐
- MLE极大似然估计和EM最大期望算法
机器学习十大算法之一:EM算法.能评得上十大之一,让人听起来觉得挺NB的.什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题.神为什么是神,因为神能做很多人做不了的事.那么EM ...
- thinkphp 输入过滤
永远不要相信客户端提交的数据,所以对于输入数据的过滤势在必行,我们建议: 开启令牌验证避免数据的重复提交: 使用自动验证和自动完成机制进行初步过滤: 使用系统提供的I函数获取用户输入数据: 对不同的应 ...
- 帝国cms把文章加入到收藏夹代码
内容模板加这个:<a href="[!--news.url--]e/member/fava/add/?classid=[!--classid--]&id=[!--id--]&q ...
- NX二次开发-UFUN获取工程图视图边界线是否显示UF_DRAW_ask_border_display
#include <uf.h> #include <uf_draw.h> #include <uf_ui.h> UF_initialize(); logical b ...
- js 彻底理解回调函数
一.前奏 在谈回调函数之前,先看下下面两段代码: 不妨猜测一下代码的结果. function say (value) { alert(value); } alert(say); alert(say(' ...
- mysql数据库分页查询优化
原博:MySQL单表百万数据记录分页性能优化 limit优化 当数据很多需要进行分页查询时:需要先查出第一条数据的id然后根据id查询大于id的数据 limt 一页的数据量 1. 直接用limit ...
- (转)RSA加密解密及数字签名Java实现
转:http://my.oschina.net/jiangli0502/blog/171263?fromerr=hc4izFe2 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rives ...
- Codeforces 1166A - Silent Classroom
题目链接:http://codeforces.com/problemset/problem/1166/A 思路:统计所有首字母出现的次数,由贪心可知对半分最少. AC代码: #include<i ...
- access数据库调用
1.工程环境配置(vs+qt) 点击项目,右键,选择项目设置,选择SQL 2.获取自己数据库的驱动版本有哪些,如下代码所示: QStringList drivers = QSqlDatabase::d ...
- Bootstrap3的响应式缩略图幻灯轮播效果设计
在线演示1 本地下载 HTML <div class="container"> <div class="col-md-12"> &l ...