ASP.NET MVC5高级编程 ——(7)LINQ to SQL

引言——Model 实现数据访问

1.1 LINQ

LINQ( Language Integrated Query )——语言集成查询,.NET Framework 3.5 中出现的技术,其命名空间(.NET Framework):System.Linq;

LINQ 是一组语言特性和API,使得开发人员可以使用统一的方式编写各种查询。查询的对象包括XML、对象集合、SQL Server 数据库等等。

1.2 LINQ要解决的问题

长期以来,开发社区形成以下格局:

  • 面向对象与数据访问两个领域长期分裂,各自为政
  • 编程语言中的数据类型与数据库中的数据类型形成两套体系。例如: -- C# 中字符串用 string 表示 -- SQL 中字符串用 NVarchar/Varchar/Char 表示
  • SQL 编码体验落后: -- 没有智能感应 -- 没有严格意义上的强类型和类型检查
  • SQL 和 XML 都有各自的查询语言,而对象没有自己的查询语言

1.3 LINQ的组成

LINQ 主要包含以下三部分:

LINQ to Objects 主要负责对象的查询

LINQ to XML 主要负责 XML 的查询

LINQ to ADO.NET 主要负责数据库的查询:

-- LINQ to SQL

-- LINQ to DataSet

-- LINQ to Entities

如图所示:

2.1 LINQ 第一例

在没有LINQ以前,我们这样查询:

用LINQ, 我们可以这样查询:

3.1 匿名方法

.NET FrameWork 在 C# 2.0 中,加入了匿名方法特性:

在 C# 3.0 中,继匿名方法之后加入了更为简洁的 Lambda 表达式

3.2 Lambda表达式语法

最基本的 Lambda 表达式语法如下:

参数列表中的参数类型可以是明确类型或者是推断类型(var)

如果是推断类型,则参数的数据类型将由编译器根据上下文自动推断出来。

如果参数列表只包含一个推断类型参数时,可以去掉括号:

完整的写法是最安全的 ,所以重点应该先讲清楚完整格式,各种简写方式都是有前提假设条件的。

如果方法体只包含一条语句时,可以去掉花括号:

3.3 Lambda表达式的更多例子

3.4 Lambda与匿名方法的关系

总体上说,匿名方法可以看作是Lambda 表达式的功能子集,但是两者存在以下区别:

  • Lambda 表达式的参数允许不指明参数类型,而匿名方法的参数必须明确指明参数类型。
  • Lambda 表达式的方法体允许由单一表达式或者多条语句组成,而匿名方法不允许单一表达式形式。

4.1 LINQ的基本操作符

  • Select()
  • Where()
  • OrderBy()
  • GroupBy()

4.1.1 基本查询操作符-获取数据 Select()

4.1.2 基本查询操作符-过滤数据 Where()

4.1.3 基本查询操作符-排序数据 OrderBy()

4.1.4 基本查询操作符-分组数据 GroupBy()

4.2 高级查询方法

4.2.1 聚合类查询方法 Count,Max/Min,Average

4.2.2 排序类查询方法 ThenBy

4.2.3 分区类查询方法 Take/TakeWhile Skip/SkipWhile

4.4.4 集合类查询方法 Distinct

4.4.5 生成类查询方法 Range Repeat

4.3 LINQ to SQL 示例

本系列文章所有实例代码GitEE地址:

https://gitee.com/jahero/mvc

本文分享自微信公众号 - 浩Coding(gh_c4a2e63d2ca7)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Unity游戏开发

LightWeight RenderPipeline

ForwardShading 原理:每个作用于物体的像素光单独计算一次,drawCall随着物体与光照数量增加而成倍增加 优点:不受硬件限制 缺点:光照计...

21520
来自专栏Frank909

深入浅出CMake(三):find_package 添加依赖库

深入浅出CMake(一):基础篇 深入浅出CMake(二):基础语法及实现九九乘法表

1.2K30
来自专栏晓晨的专栏

ASP.NET Core 奇淫技巧之动态WebApi

接触到动态WebApi(Dynamic Web API)这个词的已有几年,是从ABP框架里面接触到的,当时便对ABP的这个技术很好奇,后面分析了一波,也尝试过从...

30620
来自专栏架构师

程序员过关斩将--来自于静态方法和实例方法的联想翩翩

面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平...

9920
来自专栏tkokof 的技术,小趣及杂念

编程小知识之 GC.KeepAlive

一直以为 GC.KeepAlive 可以用于使某个托管对象永久的不被垃圾回收(调用该函数后需要主动进行 Free 之类的操作,类似于 GCHandle),但事实...

16720
来自专栏林德熙的博客

C# 匹配可空变量

在 C# 7.0 的时候提供更好用的模式匹配方法,支持通过 is 直接转换对应的类,但是如果是尝试转换可空的对象,那么将会提示无法编译,或转换失败

10020
来自专栏码农阿宇

C# 9.0新特性

看到标题,是不是认为我把标题写错了?是的,C# 8.0还未正式发布,在官网它的最新版本还是Preview 5,通往C#9的漫长道路却已经开始.前写天收到了活跃在...

22130
来自专栏林德熙的博客

Roslyn 让 VisualStudio 急速调试底层库方法

我有一个很大的项目,这个项目里面包含了很多小的底层库。有一天我发现了某个底层库可能有小伙伴挖了一个坑,我期望调试这个底层库,但是我一点都不想编译整个大项目,因为...

6120
来自专栏公众号文章

Golang 入门系列(五)GO语言中的面向对象

其实GO并不是一个纯面向对象编程语言。它没有提供类(class)这个关键字,只提供了结构体(struct)类型。

9020
来自专栏申龙斌的程序人生

想写一本给C#程序员看的区块链书籍

普通人在短时间内很难理解这些概念,但程序员们相当有优势,他们有计算机理论知识,理解这些概念相对容易一些。

9030

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励