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 ...
随机推荐
- 在WinDBG中查看内存的命令
当我们在调试器中分析问题时, 经常需要查看不同内存块的内容以分析产生的原因, 并且在随后验证所做出的假设是否正确. 由于各个对象的状态都是保存在内存中的, 因此内存的内容也就相当于对象的状态. d命令 ...
- c#种GetType()和TypeOf()的区别
C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型. typeof(x)中的x,必须是具体的类名.类型名称等,不可以是变量名称:GetType ...
- Socket心跳包异常检测的C语言实现,服务器与客户端代码案例
在Socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能较大.本文实现的是由客户端给服务器发送心跳包,服务器不必返回应答包,而是通过判断客户在线 ...
- 洛谷P3959——宝藏
传送门:QAQQAQ 题意: 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了$n$个深埋在地下的宝藏屋, 也给出了这$n$个宝藏屋之间可供开发的$m$条道路和它们的长度. 小明决心亲自前往挖掘所有 ...
- 剑指offer——21正则表达式匹配
题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式 ...
- 20130318 word2013 mathtype
1.word2013 下如何安装mathtype 1.word2013已经装好 2.下载mathtype6.9 3. 公式编辑器Mathtype安装后无法加载到word的解决办法http://w5 ...
- Intellij IDEA 撸码最头大的问题。。
想栈长我当初从 Eclipse 转用 IDEA 真是纠结,放弃然后尝试了N次,不过现在已经算是转型成功了,可以完全脱离 Eclipse 撸码了,虽然说我现在真的撸得非常少了.. 说到 IDEA 的痛点 ...
- C++之变量
变量 **作用**:给一段指定的内存空间起名,方便操作这段内存 **语法**:数据类型 变量名 = 初始值; 语法:数据类型 变量名 = 初始值; 记得加英文分号结束语句 > 注意:C++ ...
- flask-Local源码流程解析
flask中Local源码数据类型首先明确:源码中要构造的数据类型数是这样的: __storage__ = { 用线程或者协程的唯一标识为键: {stack:[ctx(session/request) ...
- javascript面向对象编程笔记(基本数据类型,数组,循环及条件表达式)
javascript面向对象编程指南 最近在看这本书,以下是我的笔记,仅供参考. 第二章 基本数据类型.数组.循环及条件表达式 2.1 变量 区分大小写 2.3 基本数据类型 数字:包括浮点数与整数 ...