sintaxis operaciones framework expresiones ejemplos consultas consulta comandos basicas anidadas c# linq linq-to-entities

c# - framework - operaciones basicas de linq



¿Cómo se construye una consulta LINQ a entidades para cargar objetos secundarios directamente, en lugar de llamar a una propiedad de referencia o cargar() (3)

AFAIK, para Silverlight (servicios de dominio) agregar el atributo [Incluir] al lugar correcto (sobre la propiedad de navegación en los metadatos) es suficiente https://stackoverflow.com/a/5332188/413032

Soy nuevo en el uso de LINQ to Entities (o Entity Framework como lo llamen) y estoy escribiendo un montón de código como este:

var item = (from InventoryItem item in db.Inventory where item.ID == id select item).First<InventoryItem>();

y luego llamar a métodos sobre ese objeto de esta manera:

var type = item.ItemTypeReference;

o

var orders = item.OrderLineItems.Load();

para recuperar objetos secundarios o relacionados.

No he perfilado el DB ni he profundizado demasiado, pero creo que cuando llamo a .Load () o a * Propiedad de referencia, en realidad estoy haciendo otra llamada al DB. Si este es el caso, ¿hay alguna forma de obtener esos objetos en mi expresión LINQ inicial?



Desea utilizar las referencias al método .Include (cadena) en este artículo "Dar forma a los resultados de la consulta" .

var item = from InventoryItem item in db.Inventory.Include("ItemTypeReference").Include("OrderLineItems") where item.ID == id select item;

Probablemente también haya una sintaxis de estilo "sql" para el Includes.

También vea este artículo acerca de pasar de LINQ-a-SQL a LINQ-a-Entidades.

Para otros que buscan una solución a este problema para Linq a SQL, usted debe hacer lo siguiente (Sustituir DataContext y otros tipos para lo que sea que tenga):

using (DataContext db = new DataContext()) { DataLoadOptions options = new DataLoadOptions(); options.LoadWith<InventoryItem>(ii => ii.ItemTypeReference); options.LoadWith<InventoryItem>(ii => ii.OrderLineItems); db.LoadOptions = options; var item = from InventoryItem item in db.Inventory where item.ID == id select item; }

Esto cargará las propiedades especificadas en LoadWith siempre que se cargue el elemento principal (InventoryItem), para ese contexto particular.

En respuesta a algunas preguntas adicionales de James y Jesper, mira esta pregunta