LINQ to SQL语句之对象加载

7 篇文章 0 订阅

1、对象加载延迟加载

在查询某对象时,实际上你只查询该对象。不会同时自动获取这个对象。这就是延迟加载。

例如,您可能需要查看客户数据和订单数据。你最初不一定需要检索与每个客户有关的所有订单数据。其优点是你可以使用延迟加载将额外信息的检索操作延迟到你确实需要检索它们时再进行。请看下面的示例:检索出来CustomerID,就根据这个ID查询出OrderID。

var custs =

from c in db.Customers

where c.City == "Sao Paulo"

select c;

上面 的查询句法不会导致语句立即执行,仅仅是一个描述性的语句,

只有需要的时候才会执行它

foreach (var cust in custs)

{

foreach (var ord in cust.Orders)

{

同时查看客户数据和订单数据

}

}

语句描述:原始查询未请求数据,在所检索到各个对象的链接中导航如何能导致触发对数据库的新查询。

2、预先加载:LoadWith 方法

你如果想要同时查询出一些对象的集合的方法。LINQ to SQL 提供了 DataLoadOptions用于立即加载对象。方法包括:

LoadWith 方法,用于立即加载与主目标相关的数据。

AssociateWith 方法,用于筛选为特定关系检索到的对象。

使用 LoadWith方法指定应同时检索与主目标相关的哪些数据。例如,如果你知道你需要有关客户的订单的信息,则可以使用 LoadWith 来确保在检索客户信息的同时检索订单信息。使用此方法可仅访问一次数据库,但同时获取两组信息。

在下面的示例中,我们通过设置DataLoadOptions,来指示DataContext 在加载Customers的同时把对应的Orders一起加载,在执行查询时会检索位于Sao Paulo的所有 Customers 的所有 Orders。这样一来,连续访问 Customer 对象的 Orders 属性不会触发新的数据库查询。在执行时生成的SQL语句使用了左连接。

NorthwindDataContext db = newNorthwindDataContext ();

DataLoadOptions ds = new DataLoadOptions();

ds.LoadWith<Customer>(p =>p.Orders);

db.LoadOptions = ds;

var custs = (

from c in db2.Customers

where c.City == "Sao Paulo"

select c);

foreach (var cust in custs)

{

foreach (var ord in cust.Orders)

{

Console.WriteLine ("CustomerID {0} has an OrderID {1}.",

cust.CustomerID,

ord.OrderID);

}

}

语句描述:在原始查询过程中使用 LoadWith 请求相关数据,以便稍后在检索到的各个对象中导航时不需要对数据库进行额外的往返。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值