当前位置: 首页 > news >正文

LINQ to SQL、NHibernate比较(一)-- LINQ和NHibernate初体验

研发与数据库打交道的系统的时候,最过于繁琐的莫过于没有编程快感的使用ADO.NET对后台数据库进行操作,因为所有的数据库连接、读取、操作千篇一律,编程成为了体力活。

虽然我们可以设计自己的类作为数据库访问的持久层,但是每一个类都必须有不相同的SQL语句,这样对于设计统一的数据库读写类造成了很大的困难。

开发人员在这种情况下必须包办窗体设计、方法设计、数据库读写设计的过程,这样加大了开发人员的负担也使得项目的维护和后期开发变得难以进行。

2 .NET下的ORM解决方案

2.1 LINQ

2.1.1 LINQ简介

作为微软开发的查询方案,LINQ 提供了一条更常规的途径即给 .Net Framework 添加一些可以应用于所有信息源( all sources of information )的具有多种用途( general-purpose )的语法查询特性( query facilities ),这是比向开发语言和运行时( runtime )添加一些关系数据( relational )特性或者类似 XML 特性( XML-specific )更好的方式。这些语法特性就叫做 .NET Language Integrated Query (LINQ) 。

如果觉得上面的解释有点抽象,那么可以这样理解,LINQ其实就是提供了一套查询功能,可以实现任何数据源的查询,此处数据源不单指数据库或者XML文件,而是任何集合或者实体,比如我们接触各种编程语言都需要用到的数组,现在不用遍历数组元素来寻找需要的项,LINQ可以实现这方面的查询。

LINQ查询数组:

2.1 LINQ查询数组

上面是最简单的LINQ实现对数组的查询,泛型类型var在LINQ查询中提供了强大的委托类型支持,不管查询集合中项的类型(无论是int,char还是string或者类),我们只用一个var就可以保存LINQ查询到的结果。程序结果如下:

2.2 LINQ查询数组程序结果

是不是很方便,LINQ的应用远远不这些,通过不同的映射方案,我们可以实现对数据库(LINQ To SQL),对XML文件(LINQ To XML)的访问。

2.1.2 LINQ简介

表2.1 LINQ的操作符

操作符

说明

聚合

Aggregate

对序列执行一个自定义方法

Average

计算数值序列的平均值

Count

返回序列中的项目数(整数)

LongCount

返回序列中的项目数(长型)

Min

查找数字序列中的最小数

Max

查找数字序列中的最大数

Sum

汇总序列中的数字

连接

Concat

将两个序列连成一个序列

转换

Cast

将序列中的元素转换成指定类型

OfType

筛选序列中指定类型的元素

ToArray

从序列返回一个数组

ToDictionary

从序列返回一个字典

ToList

从序列返回一个列表

ToLookup

从序列返回一个查询

ToSequence

返回一个 IEnumerable 序列

元素

DefaultIfEmpty

为空序列创建默认元素

ElementAt

返回序列中指定索引的元素

ElementAtOrDefault

返回序列中指定索引的元素,或者如果索引超出范围,则返回默认值

First

返回序列中的第一个元素

FirstOrDefault

返回序列中的第一个元素,或者如果未找到元素,则返回默认值

Last

返回序列中的最后一个元素

LastOrDefault

返回序列中的最后一个元素,或者如果未找到元素,则返回默认值

Single

返回序列中的单个元素

SingleOrDefault

返回序列中的单个元素,或者如果未找到元素,则返回默认值

相等

SequenceEqual

比较两个序列看其是否相等

生成

Empty

生成一个空序列

Range

生成一个指定范围的序列

Repeat

通过将某个项目重复指定次数来生成一个序列

分组

GroupBy

按指定分组方法对序列中的项目进行分组

联接

GroupJoin

通过归组将两个序列联接在一起

Join

将两个序列从内部联接起来

排序

http://www.jsqmd.com/news/1132298/

相关文章:

  • 【242期】QtScrcpy手机投屏控制的天花板,支持多设备群控!
  • Video2X:用AI魔法让模糊视频重获新生
  • 什么是相机标定
  • 多相机画面割裂根治方案:MatrixFusion™融合引擎核心原理详解
  • 毕业生必备7款AI写作辅助网站,一站式搞定选题初稿与降AI率
  • How-To: Using the N* stack, part 1
  • 秒杀系统设计核心要点
  • AI Agent框架:从模型驱动到任务执行的关键工程化实践
  • iPhone与Nothing Phone旋转图片操作大不同,无障碍设计为何重要?
  • 【DBX数据库工具技术解析】15MB管理60+数据库的Docker部署指南
  • 别让 AI 直接写接口:前后端联调前,先把这 4 份契约交给它
  • AI编程接单实战复盘:Claude Code 4天完成电商开票系统迭代,5000元私活全过程
  • Dell PERC H330/H730 RAID 卡实战:R730 创建 RAID-5 与删除配置 12 步详解
  • Cursor、Zed、Windsurf:AI原生编辑器的架构级差异解析
  • 信息论与编码课程调研报告:连续AWGN信道中香农容量极限的数学推导与MATLAB仿真实现(P124302067 吴晨晨,P124302076 吕欣欣)
  • 2026年行驶6万公里的新能源汽车,专业底盘整备究竟哪家技术更胜一筹?
  • 059、RealBasicVSR 实战:真实场景视频超分的退化建模与优化技巧
  • Optuna 分布式优化实战:4节点并行加速 CatBoost 超参数搜索
  • Power BI中SUMMARIZE函数实战:构建高性能可审计汇总表
  • Python爬虫经典案例第73篇:新闻聚合平台爬取:Google News数据采集实战
  • 2026年深度检验:10款好用的降AI率网站,部分无限免费降AI!速速码住
  • 密码学算法
  • 【考研】2026/7/5
  • 【地平线 征程 6 工具链进阶教程】QAT 训练常见问题和排查
  • AI 辅助内容生产与网站优化的实践:效率提升在哪、边界在哪
  • PWM+MOS管驱动LED振铃干扰
  • 电话机器人厂家哪个好
  • 德明利:从布头生意到整布豪赌,存储赛道的独特玩家能否再赢一局?
  • Java异常处理深度实战教程:异常管理策略
  • 第2章 异常