usar principiantes para operadores metodos instrucciones consultas consulta como avanzadas linq entity-framework lazy-loading wcf-data-services

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);