返回首页


在LINQ的DataLoadOptions允许立即加载和过滤相关数据。的DataLoadOptions允许加载相关的对象,所以这消除了需要发射一个子查询每次你问相关的对象(S)。
考虑以下情况:

如果你不喜欢这个代码:

var distlist = (from d in edb.Distributors select d).ToList();

foreach(Distributor d in distlist)

{

  var clientlist = d.Customers;

  foreach( Customer c in clientlist)

  {

       //do the code 

  }

}

,每一次循环内触发对数据库的查询,以获得有关客户的分销商,这反过来又降低性能。但如果你事先知道,你将需要使用相关的清单,当您载入主列表,即,你需要加载相关实体的数据,使用的DataLoadOptions。
修改后的代码是这样的:{C}注意要小心,当您使用的DataLoadOptions,因为它可能会降低性能,如果你不打算使用相关对象。使用的情况下,只有当你想早日加载相关的对象,你要消耗这一切。只有你一个附加的DataLoadOptions一次同一个DataContext的实例。
以上的DataLoadOptions运行完美,当您使用常规LINQ查询。但它不编译的查询工作。当您运行此代码查询打第二次,它会产生一个例外。在符合查询的DataLoadOptions
首先得到符合查询有关信息,采取在看这篇文章:{A}。现在,当您连接到一个符合查询的DataLoadOptions象我们上面那样,它可以让你在运行时异常。
Compiled queries across DataContexts with different LoadOptions not supported

为了避免异常,你需要创建一个静态变量的DataLoadOptions,因为是静态编译的LINQ查询,他们不会消耗的DataLoadOptions这也不是一成不变的。
所以,我已经创建了下面的代码的GetDataLoadOpt()静态函数返回的DataLoadOptions对象,我存储到一个静态变量DLO,并重视与查询的编译版本dlo1。{体C3}
如果你想获得上述异常,尝试取出后从静态函数v和变量dlo1代码,然后将它分配给查询的编译版本,你会得到运行时异常。

回答

评论会员: 时间:2
S