当前位置: 首页 > 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.gsyq.cn/news/1644281.html

相关文章:

  • YOLOv10模型改进-Neck改进-第68篇:YOLOv10改进策略【Neck】| CSPPAN改进
  • Video2X:用AI魔法让模糊视频重获新生
  • 什么是相机标定
  • AI Agent框架:从模型驱动到任务执行的关键工程化实践
  • 059、RealBasicVSR 实战:真实场景视频超分的退化建模与优化技巧
  • 信息论与编码课程调研报告:连续AWGN信道中香农容量极限的数学推导与MATLAB仿真实现(P124302067 吴晨晨,P124302076 吕欣欣)
  • AI编程接单实战复盘:Claude Code 4天完成电商开票系统迭代,5000元私活全过程
  • Dell PERC H330/H730 RAID 卡实战:R730 创建 RAID-5 与删除配置 12 步详解
  • 电话机器人厂家哪个好
  • 德明利:从布头生意到整布豪赌,存储赛道的独特玩家能否再赢一局?
  • 第2章 异常
  • 村长团队教你用3dMax + ZM3制作GTA5水源教程
  • YOLOv10模型改进-Neck改进-第74篇:YOLOv10改进策略【Neck】| FPN-DCN可变形卷积
  • 蓝速科技会议电子门牌部署与可视化管控指南
  • 通达信竣宝绝密主升连板量化选股与量化交易指标公式抓底部启动牛股 主力机构游资启动选股公式 波段擒龙决
  • 实用微信QQ防撤回补丁完整指南:告别消息丢失的终极方案
  • 如何免费解锁9大网盘高速下载权限:完整实战指南
  • LeetCode第三方解绑定 微信一个账号,手机号一个账号
  • 第19章|有章可循:Rules 规则系统深度剖析
  • AI编程时代程序员生存指南:从工具实操到能力重塑
  • AI Agent平台选型实战:从LangChain到CrewAI的10大开源方案深度测评
  • 连锁超市收银系统选什么?千店实测与商拓深度测评
  • 终极指南:一键修复Windows软件运行失败的Visual C++运行库问题
  • 实验七:自媒体运营分析-数据清洗与预处理
  • 项目版本管理的最佳实践:云效飞流Flow篇
  • XSS-Labs通关秘籍:7种花式绕过技巧与实战解析
  • 要不要弃坑 Cursor?一个重度用户的真实纠结
  • 从提示词工程到技能工程:Agent Skill开发实战指南
  • 《智人之上》第一章「信息是什么」读后总结
  • AI Agent开发实战指南:从概念到落地,手把手构建智能体应用