之前一直用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用法总结的更多相关文章

  1. linq用法整理

    linq用法整理 普通查询 var highScores = from student in students where student.ExamScores[exam] > score se ...

  2. Linq用法笔记

    一.什么是Linq? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. ...

  3. Linq用法小记

    一.什么是Linq? LINQ即Language Integrated Query(语言集成查询),LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性. ...

  4. 2017年12月13日 LinQ用法基本的增删改查

    LinQ是什么? LinQ是语言集成的查询,是用于C#跟Vb的扩展语言 LinQ的用法 新建一个App_Code文件夹,在文件夹下添加一个数据LinQ to SQL类,可以直接直接点击服务器管理器然后 ...

  5. 第十六节:Linq用法大全(四)

    1. OfType 获取集合中中指定类型元素. , , , , , "aaa", "bbb" }; int max = obj.OfType<int> ...

  6. Linq 用法笔记

    Linq中怎么用 between…and? var query = from p in context.Parent from c in context.Child.Where(x => p.c ...

  7. Jquery.Linq用法

    下载:http://linqjs.codeplex.com/ LINQ Pad Enumerable.Range(0, 20).Where("$ % 3 == 0").Select ...

  8. c# LINQ用法

    一.什么是LINQ LINQ(读音link)代表语言集成查询(Language Integrated Query),是.NEt框架的扩展,它允许我们用SQL查询数据库的方式来查询数据的集合,使用它,你 ...

  9. LINQ 用法,返回结果不是在定义时取值,而是在调用时实时取值,有意思!

    var names = new List<string> { "Nino o", "Alberto", "Juan", &quo ...

随机推荐

  1. 牛客网 NOIP赛前集训营-普及组(第四场)C--部分和 (高维前缀和)

    传送门 解题思路 高维前缀和模板题.首先,求前缀和有两种方式,比如说对于求二维前缀和来说. 第一种 : for(int i=1;i<=n;i++) for(int j=1;j<=n;j++ ...

  2. C#利用栈实现字符串运算解析

    附上参考文章链接:https://blog.csdn.net/qq_34831781/article/details/80104219 本人整合修复一些bug后的代码 using System; us ...

  3. (转)Android 创建与解析XML—— Dom4j方式 .

    转:http://blog.csdn.net/ithomer/article/details/7521605 1.Dom4j概述 dom4j is an easy to use, open sourc ...

  4. JSP/Servlet笔记

    一.Servlet简介 Servlet程序可以运行于任何服务器,如web.email.FTP等,所有servlet程序必须实现javax.servlet接口.GenericServlet是实现了jav ...

  5. Devstack — screen 调试工具的使用

    目录 目录 为什么要使用 screen 工具 启动 screen screen 的切换常用 退出和重新连接 screen Restart Openstack Services screen 指令选项总 ...

  6. Qt学习笔记----基础知识

    一.qt的本质 qt的本质是c++的图形界面类库,本身是mvc结构.qt能火最大程度 归功于它跨平台的特性,一次编码,多次编译应用. 注意:qt由于历史原因,经历了奇趣.诺基亚.digit公司,导致q ...

  7. java笔试之从单向链表中删除指定值的节点

    输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针. 链表的值不能重复 构造过程,例如 1 -> 2 3 -> 2 5 -> 1 4  ...

  8. 【FHQ-Treap】P4146 序列终结者

    题意: 给定一个序列,支持区间加,区间反转,区间max询问 裸的平衡树题,这里采用FHQ-Treap 每个节点多记录一个max值和两个lazy_tag,暴力Push_Down即可(大常数选手) 打完这 ...

  9. windows下mysql8.0.x简单安装!

    1.官网下载mysql安装包并解压到自己喜欢的目录 2.在解压的目录下,添加my.ini配置文件,内容如下:[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录 下面是我 ...

  10. ubuntu下安装git提示无root权限

    apt-get install git 获取git指令 sudo passwd root 重置unix密码 su root 键入密码 参考链接 https://www.cnblogs.com/2she ...