LINQ用法总结
之前一直用sql和拉姆达表达式,一直感觉linq不好用。用熟练了感觉期功能好强大,查询性能例外考究。这里讲讲基本用法。
内联查询:
var list2 = (from a in db.Role where a.IsDel==true
join b in db.UserRole on a.Id equals b.RoleId where b.Id>
where a.Id >
select new
{
a.Id,
b.RoleId
}
).ToList();
跟踪sql得到:
SELECT
[Extent1].[Id] AS [Id],
[Extent2].[RoleId] AS [RoleId]
FROM [dbo].[Role] AS [Extent1]
INNER JOIN [dbo].[UserRole] AS [Extent2] ON [Extent1].[Id] = [Extent2].[RoleId]
WHERE ( = [Extent1].[IsDel]) AND ([Extent2].[Id] > ) AND ([Extent1].[Id] > )
左连表查询:
var list3 = (from a in db.Role
join b in db.UserRole on a.Id equals b.RoleId into temp
from ur in temp.DefaultIfEmpty()
select new
{
a.Id,
ur.UserId
}).ToList();
sql:
SELECT
[Extent1].[Id] AS [Id],
[Extent2].[UserId] AS [UserId]
FROM [dbo].[Role] AS [Extent1]
LEFT OUTER JOIN [dbo].[UserRole] AS [Extent2] ON [Extent1].[Id] = [Extent2].[RoleId]
order by:
var list4 = (from a in db.Role
join b in db.UserRole on a.Id equals b.RoleId
group a by a.Id into g
select new
{
g.Key,
Name=g.Max(x=>x.Name)
}).ToList();
sql:
SELECT
[GroupBy1].[K1] AS [Id],
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
[Extent1].[Id] AS [K1],
MAX([Extent1].[Name]) AS [A1]
FROM [dbo].[Role] AS [Extent1]
INNER JOIN [dbo].[UserRole] AS [Extent2] ON [Extent1].[Id] = [Extent2].[RoleId]
GROUP BY [Extent1].[Id]
) AS [GroupBy1]
in 查询:like的查询和in写法差不多,都是用Contains
int[] arr = { , };
var list1 = (from a in db.Role
where arr.Contains(a.Id)
select new Test
{
Id = a.Id,
list = db.UserRole.Where(x => x.RoleId == a.Id).ToList()
}
).ToList();
sql:
SELECT
[Project1].[Id] AS [Id],
[Project1].[C1] AS [C1],
[Project1].[Id1] AS [Id1],
[Project1].[UserId] AS [UserId],
[Project1].[RoleId] AS [RoleId]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent2].[Id] AS [Id1],
[Extent2].[UserId] AS [UserId],
[Extent2].[RoleId] AS [RoleId],
CASE WHEN ([Extent2].[Id] IS NULL) THEN CAST(NULL AS int) ELSE END AS [C1]
FROM [dbo].[Role] AS [Extent1]
LEFT OUTER JOIN [dbo].[UserRole] AS [Extent2] ON [Extent2].[RoleId] = [Extent1].[Id]
WHERE [Extent1].[Id] IN (, )
) AS [Project1]
ORDER BY [Project1].[Id] ASC, [Project1].[C1] ASC
上面in查询,我研究稍微深入了点,单独写查询看linq是做一次连接还是多长,结果验证是内部做处理,一次链接完成,直接颠覆了我以前的观念。先记录到这里
LINQ用法总结的更多相关文章
- linq用法整理
linq用法整理 普通查询 var highScores = from student in students where student.ExamScores[exam] > score se ...
- Linq用法笔记
一.什么是Linq? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. ...
- Linq用法小记
一.什么是Linq? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. ...
- 2017年12月13日 LinQ用法基本的增删改查
LinQ是什么? LinQ是语言集成的查询,是用于C#跟Vb的扩展语言 LinQ的用法 新建一个App_Code文件夹,在文件夹下添加一个数据LinQ to SQL类,可以直接直接点击服务器管理器然后 ...
- 第十六节:Linq用法大全(四)
1. OfType 获取集合中中指定类型元素. , , , , , "aaa", "bbb" }; int max = obj.OfType<int> ...
- Linq 用法笔记
Linq中怎么用 between…and? var query = from p in context.Parent from c in context.Child.Where(x => p.c ...
- Jquery.Linq用法
下载:http://linqjs.codeplex.com/ LINQ Pad Enumerable.Range(0, 20).Where("$ % 3 == 0").Select ...
- c# LINQ用法
一.什么是LINQ LINQ(读音link)代表语言集成查询(Language Integrated Query),是.NEt框架的扩展,它允许我们用SQL查询数据库的方式来查询数据的集合,使用它,你 ...
- LINQ 用法,返回结果不是在定义时取值,而是在调用时实时取值,有意思!
var names = new List<string> { "Nino o", "Alberto", "Juan", &quo ...
随机推荐
- 牛客网 NOIP赛前集训营-普及组(第四场)C--部分和 (高维前缀和)
传送门 解题思路 高维前缀和模板题.首先,求前缀和有两种方式,比如说对于求二维前缀和来说. 第一种 : for(int i=1;i<=n;i++) for(int j=1;j<=n;j++ ...
- C#利用栈实现字符串运算解析
附上参考文章链接:https://blog.csdn.net/qq_34831781/article/details/80104219 本人整合修复一些bug后的代码 using System; us ...
- (转)Android 创建与解析XML—— Dom4j方式 .
转:http://blog.csdn.net/ithomer/article/details/7521605 1.Dom4j概述 dom4j is an easy to use, open sourc ...
- JSP/Servlet笔记
一.Servlet简介 Servlet程序可以运行于任何服务器,如web.email.FTP等,所有servlet程序必须实现javax.servlet接口.GenericServlet是实现了jav ...
- Devstack — screen 调试工具的使用
目录 目录 为什么要使用 screen 工具 启动 screen screen 的切换常用 退出和重新连接 screen Restart Openstack Services screen 指令选项总 ...
- Qt学习笔记----基础知识
一.qt的本质 qt的本质是c++的图形界面类库,本身是mvc结构.qt能火最大程度 归功于它跨平台的特性,一次编码,多次编译应用. 注意:qt由于历史原因,经历了奇趣.诺基亚.digit公司,导致q ...
- java笔试之从单向链表中删除指定值的节点
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针. 链表的值不能重复 构造过程,例如 1 -> 2 3 -> 2 5 -> 1 4 ...
- 【FHQ-Treap】P4146 序列终结者
题意: 给定一个序列,支持区间加,区间反转,区间max询问 裸的平衡树题,这里采用FHQ-Treap 每个节点多记录一个max值和两个lazy_tag,暴力Push_Down即可(大常数选手) 打完这 ...
- windows下mysql8.0.x简单安装!
1.官网下载mysql安装包并解压到自己喜欢的目录 2.在解压的目录下,添加my.ini配置文件,内容如下:[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录 下面是我 ...
- ubuntu下安装git提示无root权限
apt-get install git 获取git指令 sudo passwd root 重置unix密码 su root 键入密码 参考链接 https://www.cnblogs.com/2she ...