principiantes - metodos linq
¿Cuáles son las alternativas para usar Expand en una consulta de LINQ to ADO.net Data Service? (2)
Con LINQ to Entities también puede usar el método Include . Puede aplicar esto a mí una vez que se haya declarado, pero antes de que se ejecute, por ejemplo:
me = me.Include("MailingAddress");
Me pregunto si hay alguna alternativa al uso de la palabra clave Expandir al realizar una consulta de LINQ to ADO.net Data Services. El método expand me proporciona los datos que me interesan, pero me exige conocer todos los subobjetos con los que voy a trabajar con antelación. Mi preferencia absoluta sería que esos subobjetos se cargarían de forma lenta cuando accediera a ellos, pero esto no parece ser una opción (podría agregar esta carga diferida a la propiedad de ese subobjeto, pero se borra cuando hago una actualización de la referencia del servicio de datos).
¿Alguien tiene alguna sugerencia / mejores prácticas / alternativas para esta situación? Gracias.
===== Ejemplo de código que usa un miembro que tiene una dirección de correo =====
Trabajos:
var me = (from m in ctx.Member.Expand("MailingAddress")
where m.MemberID == 10000
select m).First();
MessageBox.Show(me.MailingAddress.Street);
Preferiría (realmente me gustaría si esto luego fue y cargó la dirección de correo)
var me = (from m in ctx.Member
where m.MemberID == 10000
select m).First();
MessageBox.Show(me.MailingAddress.Street);
O al menos (nota: algo similar a esto, con MailingAddressReference, funciona en el lado del servidor si lo hago como LINQ to Entities en una operación de servicio)
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);
Cargando subelementos a través de ADO.net Data Services parece tener dos opciones:
Eager Loading
Realizado por .Expand ("[MemberVariableName]") en el ejemplo de LINQ to Data Services
var me = (from m in ctx.Member.Expand("MailingAddress")
where m.MemberID == 10000
select m).First();
MessageBox.Show(me.MailingAddress.Street);
Carga lenta
Realizado llamando a .LoadProperty en el contexto y pasándole la variable y la propiedad que debería estar cargada de forma diferida.
var me = (from m in ctx.Member
where m.MemberID == 10000
select m).First();
ctx.LoadProperty(myMember, "MailingAddresses");
MessageBox.Show(me.MailingAddress.Street);