博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq学习(三)-基本查询
阅读量:5055 次
发布时间:2019-06-12

本文共 4319 字,大约阅读时间需要 14 分钟。

一、本将主要介绍内容

从linq,sql,lambda三个角度比较来学习

select、orderby、分页、group by、distinct、子查询、in的用法

1.select

查询用户和它们的自我介绍

Linq to sql

from a in Blog_UserInfoselect new{    真实名字=a.RealName,    自我介绍=a.Introduce}

sql

SELECT [t0].[RealName] AS [真实名字], [t0].[Introduce] AS [自我介绍]FROM [Blog_UserInfo] AS [t0]

Lambda

Blog_UserInfo   .Select (      a =>          new           {            真实名字 = a.RealName,             自我介绍 = a.Introduce         }   )

2.orderby

查询名字里带friend的用户,并排序

Linq to sql

from a in Blog_Userswhere a.NickName.Contains("Friend")orderby a.UserId ascending,a.CreateTime descendingselect a--或者from a in Blog_Userswhere a.NickName.Contains("Friend")orderby a.UserId,a.CreateTime select a

sql

-- Region ParametersDECLARE @p0 NVarChar(1000) = '%Friend%'-- EndRegionSELECT [t0].[UserId], [t0].[NickName], [t0].[CreateTime]FROM [Blog_User] AS [t0]WHERE [t0].[NickName] LIKE @p0ORDER BY [t0].[UserId], [t0].[CreateTime] DESC

Lambda

Blog_Users   .Where (a => a.NickName.Contains ("Friend"))   .OrderBy (a => a.UserId)   .ThenByDescending (a => a.CreateTime)

3.分页

按照每页2条 ,查询第2页的留言表的信息

Linq to sql

(from a in Blog_LeaveMsgs select a).Skip(2).Take(2)

sql

-- Region ParametersDECLARE @p0 Int = 2DECLARE @p1 Int = 2-- EndRegionSELECT [t1].[ID], [t1].[ReceiverId], [t1].[LeaverId], [t1].[CreateTime], [t1].[Content]FROM (    SELECT ROW_NUMBER() OVER (ORDER BY [t0].[ID], [t0].[ReceiverId], [t0].[LeaverId], [t0].[CreateTime], [t0].[Content]) AS [ROW_NUMBER], [t0].[ID], [t0].[ReceiverId], [t0].[LeaverId], [t0].[CreateTime], [t0].[Content]    FROM [Blog_LeaveMsg] AS [t0]    ) AS [t1]WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1ORDER BY [t1].[ROW_NUMBER]

Lambda

Blog_LeaveMsgs   .Select (a => a)   .Skip (2)   .Take (2)

4.1分组1(group by字段)

根据用户来分组,查询留言数大于等于3条的用户ID和相应留言数量

Linq to sql

from a in Blog_LeaveMsgs group a by a.LeaverId into bwhere b.Count() >=3select new{    朋友ID = b.Key,    留言数 = b.Count()}

sql

-- Region ParametersDECLARE @p0 Int = 3-- EndRegionSELECT [t1].[LeaverId] AS [朋友ID], [t1].[value2] AS [留言数]FROM (    SELECT COUNT(*) AS [value], COUNT(*) AS [value2], [t0].[LeaverId]    FROM [Blog_LeaveMsg] AS [t0]    GROUP BY [t0].[LeaverId]    ) AS [t1]WHERE [t1].[value] >= @p0

4.2分组2(group by多个字段)

按照接收人和留言人进行分组,查看覆盖的接收人和留言人情况

Linq to sql

from a in Blog_LeaveMsgsgroup a by new{a.ReceiverId,a.LeaverId} into bselect new{    接收人ID=b.Key.ReceiverId,    留言人ID=b.Key.LeaverId}

sql

SELECT [t0].[ReceiverId] AS [接收人ID], [t0].[LeaverId] AS [留言人ID]FROM [Blog_LeaveMsg] AS [t0]GROUP BY [t0].[ReceiverId], [t0].[LeaverId]

Lambda

Blog_LeaveMsgs   .GroupBy (      a =>          new           {            ReceiverId = a.ReceiverId,             LeaverId = a.LeaverId         }   )   .Select (      b =>          new           {            接收人ID = b.Key.ReceiverId,             留言人ID = b.Key.LeaverId         }   )

5.distinct

查看留言表中的留言人人数

Linq to sql

(from a in Blog_LeaveMsgsselect a.LeaverId).Distinct()

sql

SELECT DISTINCT [t0].[LeaverId]FROM [Blog_LeaveMsg] AS [t0]

Lambda

Blog_LeaveMsgs   .Select (a => a.LeaverId)   .Distinct ()

6.子查询

查询留言数量超过4条的用户信息

Linq to sql

from a in Blog_Userswhere(from b in Blog_LeaveMsgs group b by b.LeaverId into b where b.Count()>=4select b.Key).Contains(a.UserId)select a

sql

-- Region ParametersDECLARE @p0 Int = 4-- EndRegionSELECT [t0].[UserId], [t0].[NickName], [t0].[CreateTime]FROM [Blog_User] AS [t0]WHERE EXISTS(    SELECT NULL AS [EMPTY]    FROM (        SELECT COUNT(*) AS [value], [t1].[LeaverId]        FROM [Blog_LeaveMsg] AS [t1]        GROUP BY [t1].[LeaverId]        ) AS [t2]    WHERE ([t2].[LeaverId] = ([t0].[UserId])) AND ([t2].[value] >= @p0)    )

Lambda

Blog_Users   .Where (      a =>          Blog_LeaveMsgs            .GroupBy (b => b.LeaverId)            .Where (b => (b.Count () >= 4))            .Select (b => b.Key)            .Contains ((Int32?)(a.UserId))   )

7.in操作

查询制定用户昵称的用户

Linq to sql

from a in Blog_Userswhere new string[]{
"Kimisme","FriendLee"}.Contains(a.NickName)select a

sql

-- Region ParametersDECLARE @p0 NVarChar(1000) = 'Kimisme'DECLARE @p1 NVarChar(1000) = 'FriendLee'-- EndRegionSELECT [t0].[UserId], [t0].[NickName], [t0].[CreateTime]FROM [Blog_User] AS [t0]WHERE [t0].[NickName] IN (@p0, @p1)

Lambda

Blog_Users   .Where (a => new String[] { "Kimisme", "FriendLee" } .Contains (a.NickName))

转载于:https://www.cnblogs.com/kimisme/p/5172328.html

你可能感兴趣的文章
多变量微积分笔记24——空间线积分
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
ACdream 1115 Salmon And Cat (找规律&&打表)
查看>>
JSON、JSONP、Ajax的区别
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
css3动画——基本准则
查看>>
javaweb常识
查看>>
Java注解
查看>>
web自己主动保存表单
查看>>