我想知道在执行 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/