博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ用法总结
阅读量:4574 次
发布时间:2019-06-08

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

之前一直用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>0                         where a.Id > 0                          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 (1 = [Extent1].[IsDel]) AND ([Extent2].[Id] > 0) AND ([Extent1].[Id] > 0)
View Code

左连表查询:

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]
View Code

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]
View Code

 

in 查询:like的查询和in写法差不多,都是用Contains

int[] arr = { 1, 2 };            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 1 END AS [C1]        FROM  [dbo].[Role] AS [Extent1]        LEFT OUTER JOIN [dbo].[UserRole] AS [Extent2] ON [Extent2].[RoleId] = [Extent1].[Id]        WHERE [Extent1].[Id] IN (1, 2)    )  AS [Project1]    ORDER BY [Project1].[Id] ASC, [Project1].[C1] ASC

 

上面in查询,我研究稍微深入了点,单独写查询看linq是做一次连接还是多长,结果验证是内部做处理,一次链接完成,直接颠覆了我以前的观念。先记录到这里

转载于:https://www.cnblogs.com/zhuyapeng/p/11275151.html

你可能感兴趣的文章
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第1节 异常_14_自定义异常类的练习...
查看>>
第五周总结
查看>>
Poj 2328 Guessing Game(猜数字游戏)
查看>>
Hibernate基础知识
查看>>
20150518 字符设备驱动
查看>>
UIView的动画之初步学习
查看>>
中小企业实施OA的意义
查看>>
es6 数组
查看>>
JS判断是否在微信浏览器打开
查看>>
javascript中typeof和instanceof的区别
查看>>
数据结构-数组1
查看>>
jquery之别踩白块游戏的实现
查看>>
转载Eclipse中Maven WEB工程tomcat项目添加调试
查看>>
caller和callee的解析与使用-型参与实参的访问
查看>>
[转]JavaScript线程运行机制
查看>>
日期时间处理函数收集
查看>>
HDOJ树形DP专题之Anniversary party
查看>>
设计师 商业
查看>>
算法(例子)
查看>>
python操作Memcache
查看>>