步步学LINQ to SQL:使用LINQ检索数据

该系列教程描述了如何采用手动的方式映射你的对象类到数据表(而不是使用象SqlMetal这样的自动化工具)以便能够支持数据表之间的M:M关系和使用实体类的数据绑定。即使你选择使用了自动生成类的工具,理解这一实现过程可以让你更加方便地对你的应用程序加以扩展。

  第一篇:步步学LINQ to SQL:将类映射到数据库

  一旦你将数据库表映射到对应的类对象上并在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.Books
where book.Price.CompareTo( 30m ) < 0
select book;

  LINQ的延期执行意味着对books集合的检索不会即时从数据库取得直到实际需要时才进行(例如,使用一个foreach循还),因此我们可以保持应用的过滤条件,然后限制查询的数据以确保读取数据的效率。

  例如,你以后可以使用LINQ提供的orderby语法来定义上面的结果集将数据按书的标题进行排序。

IEnumerable sortedBooks = from book in cheapBooks
orderby 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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值