linq - 在 LINQ to ADO.net 数据服务查询中使用 Expand 的替代方法有哪些?

标签 linq entity-framework lazy-loading wcf-data-services

我想知道在执行 LINQ to ADO.net 数据服务查询时是否有任何替代方法可以使用 Expand 关键字。 expand 方法确实为我提供了我感兴趣的数据,但它要求我提前知道我将要使用的所有子对象。我的绝对偏好是,当我访问它们时,这些子对象将为我延迟加载,但这看起来不是一个选项(我可以将此延迟加载添加到该子对象属性的 get 中,但它当我更新数据服务引用时会消失)。

有没有人对这种情况有任何建议/最佳实践/替代方案?谢谢。

===== 使用具有 MailingAddress 的 Member 的示例代码 =====

作品:

var me = (from m in ctx.Member.Expand("MailingAddress")
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

会更喜欢(如果然后去加载 MailingAddress 真的很喜欢)
var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

或者至少(注意:类似的东西,使用 MailingAddressReference,在服务器端工作,如果我在服务操作中作为 LINQ to Entities 这样做)
var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
if (!(me.MailingAddress.IsLoaded())) me.MailingAddress.Load()
MessageBox.Show(me.MailingAddress.Street);

最佳答案

通过 ADO.net 数据服务加载子对象似乎有两种选择:

急切加载

由 LINQ to Data Services 示例上的 .Expand("[MemberVariableName]") 完成

var me = (from m in ctx.Member.Expand("MailingAddress")          
         where m.MemberID == 10000          
         select m).First();
MessageBox.Show(me.MailingAddress.Street);

延迟加载

通过在上下文上调用 .LoadProperty 并将应该延迟加载的变量和属性传递给它来完成。
var me = (from m in ctx.Member          
          where m.MemberID == 10000          
          select m).First();
ctx.LoadProperty(myMember, "MailingAddresses");
MessageBox.Show(me.MailingAddress.Street);

关于linq - 在 LINQ to ADO.net 数据服务查询中使用 Expand 的替代方法有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/177520/

相关文章:

c# - 将 ListView 绑定(bind)到 ObservableCollection 和 Linq

c# - 如何在 LINQ 中执行子查询?

c# - 在 linq c# 中防止 proc 中的 sql 注入(inject)

c# - 带有 XML 文件的 Entity Framework

sql-server - Entity Framework Code First - 更改表列排序规则

ios - 在聊天应用程序中使用带有 contentoffset 的 uitableview 进行延迟加载

jquery - 延迟加载水平滚动 jQuery

c# - 在多个 linqWhere 子句中使用相同的查找值,而无需多次查找

c# - NHibernate 将缓存实体重新附加到不同 session 的正确方法

c# - 使用 RegisterInitializer 连接事件处理程序