步步学LINQ to SQL:使用LINQ检索数据【转】
2013-06-25 15:28
225 查看
【IT168 专稿】该系列教程描述了如何采用手动的方式映射你的对象类到数据表(而不是使用象SqlMetal这样的自动化工具)以便能够支持数据表之间的M:M关系和使用实体类的数据绑定。即使你选择使用了自动生成类的工具,理解这一实现过程可以让你更加方便地对你的应用程序加以扩展。
第一篇:步步学LINQ to SQL:将类映射到数据库表
第三篇:步步学LINQ to SQL:为实体类添加关系
一旦你将数据库表映射到对应的类对象上并在DataContext中申明了到数据库的映射关系,你就可以不需要使用一行数据库代码(SQL语句)访问数据了。
通过一个简单的示例BookCatalog(强类型的DataContext)来说明,你可以通过使用在Authors, Books, 和 Categories中定义的集合从数据库中访问book, author, 和 category。
![](http://image4.it168.com/2010/1/4/3eee2422-b2ab-4a4e-8f78-08dde099acba.jpg)
例如,要查找书的类别,你所要做的就是循还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)。
第一篇:步步学LINQ to SQL:将类映射到数据库表
第三篇:步步学LINQ to SQL:为实体类添加关系
一旦你将数据库表映射到对应的类对象上并在DataContext中申明了到数据库的映射关系,你就可以不需要使用一行数据库代码(SQL语句)访问数据了。
通过一个简单的示例BookCatalog(强类型的DataContext)来说明,你可以通过使用在Authors, Books, 和 Categories中定义的集合从数据库中访问book, author, 和 category。
![](http://image4.it168.com/2010/1/4/3eee2422-b2ab-4a4e-8f78-08dde099acba.jpg)
例如,要查找书的类别,你所要做的就是循还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)。
相关文章推荐
- Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)
- MVC中使用Linq To Sql进行数据查询及分页
- 在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。
- [导入]Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)
- 如何使用LINQ to SQL插入、修改、删除数据
- VB.NET中使用Linq TO SQL添加数据后获得自增长列ID
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据
- 在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。
- 转:使用linq to sql 随机取一行数据的方法
- N 层应用程序中的数据检索和 CUD 操作 (LINQ to SQL)
- 地磅称量系统之(17~23)使用LINQ to SQL Classes模板将数据表和存储过程映射成对象
- Linq to sql:使用存储过程新增数据
- 【LINQ专题】使用LINQ to SQL插入、修改、删除数据
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据[转]
- WCF 使用 LINQ To SQL 数据序列化的终极解决办法!!!!
- 关于使用Linq to sql作为数据交互时的架构问题
- Linq to SQL - N 层应用程序中的数据检索和 CUD 操作
- 使用LINQ to SQL更新数据库
- ScottGu之博客翻译-第6部分-用存储过程检索数据-LINQ to SQL (Part 6 - Retrieving Data Using Stored Procedures)
- LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据