复杂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

原文地址:https://www.cnblogs.com/jiangyunfeng/p/11822298.html

时间: 2024-11-05 22:54:06

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

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

https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) var result = ds.AsEnumerable().GroupBy(s => new{Year = s.Field<int>("Year"), Month = s.Field<int>("Month"), Day = s.Fie

C#学习记录(七)LINQ语句及LAMDA表达式

LINQ LINQ是一种集成在计算机语言里的信息查询语句,可以让编写者以代码的方式操作数据库. 在C#中,LINQ语句有两种写法. 这是第一种写法 IEnumerable<Customer> result = from customer in customers where customer.FirstName == "Donna“ select customer; 由于这种写法比较容易和SQL语言混淆,所以我更倾向于使用另一种写法 IEnumerable<Customer&g

常用的MySQL语句写法

常用的MySQL语句写法 MySQL的SQL语句写法,除了那些基本的之外,还有一些也算比较常用的,这里记录下来,以便以后查找.     好记性不如烂笔头,这话说的太有道理了,一段时间不写它,还真容易忘记.大家不要纠结这些SQL语句包含的业务或是其它问题,本文只是一篇笔记而已.     将数据从T1表导入到T2表 INSERT INTO T2 (C1,C2) SELECT C1,C2 FROM T1 [WHERE C1 = XX AND C2 = XX ORDER BY C1] 使用T2表的NAM

Linq语句概要

这些都是在SQL语句中经常用到的,因此从形式上看,LINQ 语句与 SQL有很多相似之处.但尽管如此,还应该明确,LINQ与SQL是两种完全不同性质的语言: 第一. LINQ是面向对象的强类型(类型安全)语言: 第二. 从理论上讲,LINQ几乎可以用来访问所有类型的数据(包括数据库). 7.3.2 语句示例 例1.下面是LINQ的一个表达式: var course = from w in "语文 数学 英文 物理 计算机 伦理学 新闻学".Split()      where w.Le

LINQ语句中的.AsEnumerable() 和 .AsQueryable()的区别【转】

在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() .例如: string strcon ="Data Source=.\\SQLEXPRESS;Initial Catalog=Db_Example;Persist Security Info=True;User ID=sa;Password=sa";SqlConnection con =new SqlConnection(strcon);con.Open();string strsql

判断linq语句结果是否为空的方法

如: var TasComID = (from ee in LinkToSQL.TasCom                                where ee.TasComNum == cbb_TasComNum.SelectedItem.ToString() && ee.IsDeleted == false                                select ee.TasComID).Distinct(); if(TasComID.FirstOrDe

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

最近在做动态构造linq语句,从网上找了很多,大多数,都是基于一张表中的某一个字段,这样的结果,从网上可以搜到很多.但如果有外键表,需要动态构造外键表中的字段,那么问题来了,学挖掘机哪家强?哦,不是,应该怎么做呢. 关于动态构造linq的,http://www.cnblogs.com/blusehuang/archive/2007/07/13/816970.html   该文章已经描述的很清楚了.我也不多说了. 其中,关键的代码是: Expression con = Expression.Cal

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

在写LINQ语句的时候,往往会看到.AsEnumerable() 和 .AsQueryable() . 上述代码使用LINQ 针对数据集中的数据进行筛选和整理,同样能够以一种面向对象的思想进行数据集中数据的筛选.在使用LINQ 进行数据集操作时,LINQ 不能直接从数据集对象中查询,因为数据集对象不支持LINQ 查询,所以需要使用AsEnumerable 方法返回一个泛型的对象以支持LINQ 的查询操作. .AsEnumerable()是延迟执行的,实际上什么都没有发生,当真正使用对象的时候(例

Linq语句查询简介

查询是一种从数据源检索数据的表达式.查询通常用专门的查询语言来表示.随着时间的推移,人们已经为各种数据源开发了不同的语言:例如,用于关系数据库的 SQL 和用于 XML 的 XQuery.因此,开发人员不得不针对他们必须支持的每种数据源或数据格式而学习新的查询语言.LINQ 通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况.在 LINQ 查询中,始终会用到对象.可以使用相同的基本编码模式来查询和转换 XML 文档.SQL 数据库.ADO.NET 数据集..NET 集合中的数据