步步学LINQ to SQL:使用LINQ检索数据
该系列教程描述了如何采用手动的方式映射你的对象类到数据表(而不是使用象SqlMetal这样的自动化工具)以便能够支持数据表之间的M:M关系和使用实体类的数据绑定。即使你选择使用了自动生成类的工具,理解这一实现过程可以让你更加方便地对你的应用程序加以扩展。
一旦你将数据库表映射到对应的类对象上并在DataContext中申明了到数据库的映射关系,你就可以不需要使用一行数据库代码(SQL语句)访问数据了。
通过一个简单的示例BookCatalog(强类型的DataContext)来说明,你可以通过使用在Authors,Books和 Categories中定义的集合从数据库中访问book,author和category。
例如,要查找书的类别,你所要做的就是循还bookCatalog.Books对象并且LINQ会自动地查找数据库(通过映射关系)并填充你使用的集合---使用Book类为要查找的每本书创建一个实例:
BookCatalog bookCatalog = new BookCatalog( );foreach( Book book in bookCatalog.Books){
string title = book.Title;
decimal price = book.Price;
你也可以使用LINQ来过滤这些结果集,因为大多数时候,你并不要一次返回所有的书或者基于性能方面的考虑也不会这么做。
LINQ提供了一套完整的类似于SQL语法的语言,该语言已经被集成到了.NET语言(C#,Visual Basic)。对该语法的描述超出了本文的范围,下面我们一起看两个例子以了解它们是如何使用的。
因为BookCatalog返回一个集合对象,我们使用的查询语法将会查找这些对象(意味着你将直接使用对象名以及它们包涵的字段或属性而不是数据表的字段)。因此,例如,如果你仅仅想查找价格低于$30的书籍,你可以使用一个LINQ where从句,该从句可以仅仅只从bookCatalog.Books集合对象上查找价格低于$30的书:
IEnumerable cheapBooks = from book in bookCatalog.Bookswhere book.Price.CompareTo( 30m ) 0
select book;
LINQ的延期执行意味着对books集合的检索不会即时从数据库取得直到实际需要时才进行(例如,使用一个foreach循还),因此我们可以保持应用的过滤条件,然后限制查询的数据以确保读取数据的效率。
例如,你以后可以使用LINQ提供的orderby语法来定义上面的结果集将数据按书的标题进行排序。
IEnumerable sortedBooks = from book in cheapBooksorderby book.Title
select book;
现在,如果你在执行了LINQ查询链之后通过sortedBooks执行循还,仅仅只会执行一次数据库查询。其结果仍然会返回价格低于$30并且按照书的标题排序的所有书。
BookCatalog bookCatalog = new BookCatalog( );IEnumerable cheapBooks = from book in bookCatalog.Books
where book.Price.CompareTo( 30m ) 0
select book;
IEnumerable sortedBooks = from book in cheapBooks
orderby book.Title
select book;
foreach( Book book in sortedBooks ) { ... }
现在我们一起看看如何映射对象之间的关系以便你能够操作这些对象(例如book.Author.Name)。
本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组 本篇文章讲解的主要内容是:***如何使用lag函数让结果集重复数据只显示一次、用行转列pivot写法优化部门之间计算工资差异类似需求、如何通过ceil函数对已有数据进行分组打印、放假安排团队分组值班,如何通过ntile()over(order by )快速进行人员分组***
【SQL开发实战技巧】系列(二十三):数仓报表场景☞ 如何对数据排列组合去重以及通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高 怎样对数据组合重新排列并去重的问题、通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。本篇文章主要介绍的两个方面,第一个方面曾经有好几个网友和同事问我,第二个问题真的是很多同行的通病,认为分析函数是万金油,一股脑用。
【SQL开发实战技巧】系列(二十一):数据仓库中时间类型操作(进阶)识别重叠的日期范围,按指定10分钟时间间隔汇总数据 如何识别重叠的日期范围、日期出现次数、确定当前记录和下一条记录之间相差的天数【SQL开发实战技巧】这一系列博主当作复习旧知识来进行写作,毕竟SQL开发在数据分析场景非常重要且基础,面试也会经常问SQL开发和调优经验,相信当我写完这一系列文章,也能再有所收获,未来面对SQL面试也能游刃有余~。例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
相关文章
- Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor
- SQL案例分析-应用系统用户权限设计.sql
- SQL中用一句sql语句将数据库中的两列值进行交换
- 第七十二章 SQL命令 SELECT(四)
- 如何选择满足需求的SQL on Hadoop/Spark系统
- Sql Server-查询一列的数据进行拼接
- 《Oracle SQL疑难解析》——1.6 批量地从一个表中复制数据到另一个表
- 01_change_schema.sql
- sql server 小技巧(4) Sql server 排序时让空值排在最后
- SQL 一个表中的两个外键来自于同一个表创造的视图
- sql server 2000 一个表的数据插入到三个相关联表中,一条一条的插入
- 《SQL与关系数据库理论——如何编写健壮的SQL代码》一2.3 数据值原子性
- ms sql server缓存清除与内存释放
- SQL Server 2014 中,新建登录用户,分配权限,并指定该用户的数据
- Microsoft SQL Server 2008 R2官方中文版(SQL2008下载)
- sql server性能计数器缺失,sql server找回丢失的性能计数器
- sql server登录账户看不到sql server代理和维护计划
- sql server如何设置密码过期时间呢?
- 【SQL刷题】Day12----SQL汇总数据专项练习
- SQL学习之使用视图
- 关于SQL Server服务占用内存过大---限制数据库内存使用
- SQL把a表字段数据存到b表字段 update,,insert
- 数据库系统原理课程总结3——SQL语句,建表,主键外键,存储过程,批量输入百万级数据