快速业务通道

LINQ学习笔记:LINQ to SQL实体类

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-13
的,这意味着只有当你开始枚举相关结果集的时候查询才会真正执行.

而在Purchase实体类也有对应的Customer属性, 如下所示:

   1: [Association (Storage=“_Customer”,
   2:  
   3:               ThisKey=“CustomerID”,
   4:  
   5:               IsForeignKey=true)]
   6:  
   7: public Customer Customer { get {…} set{…} }

虽然这个属性的类型是Customer,但其后的对应字段_Customer是EntityRef类型(通过EntityRef.Entity得到Customer实体类),EntityRef实现了延迟执行功能,因此只有当你真正需要Customer数据的时候它才会从数据库当中读取对应的行.

LINQ to SQL的延迟执行

LINQ to SQL的延迟执行与本地查询在语义上有点不同,那就是当一个子级查询出现在一个Select表达式里面的时候

1. 如果是本地查询, 你会有两次的延迟查询. 这意味着如果你只是枚举外层的结果序列, 而没有去枚举内部的序列, 那么内部的子查询永远都不会执行

2. 而如果是LINQ to SQL,子查询将会在外部查询被执行的时候就执行了, 这可以避免额外的往还.

   1: var dataContext = new CustomDataContext (“myConnectionString”);
   2:  
   3: var query = from c in dataContext.Customers
   4:  
   5:             select
   6:  
   7:                from p in c.Purchases
   8:  
   9:                select new{ c.Name, p.Price };
  10:  
  11: foreach (var customerPurchaseResults inquery)
  12:  
  13:   foreach (var namePrice in customerPurchaseResults)
  14:  
  15:     Console.WriteLine (namePrice.Name + ” spent “ + namePrice.Price);

任何EntitySets都会显式的在一次往返中加载所有的数据:

   1: var query = from c in dataContext.Customers
   2:  
   3:             select new { c.Name, c.Purchases };
   4:  
   5: foreach (var row in query)
   6:  
   7:   foreach (Purchase p in row.Purchases)
   8:  
   9:     Console.WriteLine (row.Name + ” spent “ + p.Price);

但如果我们先拥有query变量,而是直接使用下面这样的做法:

   1: foreach (Customer c in dataContext.Customers)
   2:  
   3:   foreach (Purchase p in c.Purchases) // 数据库往返
   4:  
   5:     Console.WriteLine (c.Name + ” spent “ + p.Price);

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号