Pregunta

Tengo una tabla "pedidos" con una clave externa "ProductID".

Quiero mostrar los pedidos en una grilla con el nombre del producto, sin Carga lenta para un mejor rendimiento, pero si uso Opciones de carga de datos se recupera todo Campos de producto, que parecen un exagerar.

¿Hay alguna manera de recuperar solo ¿El nombre del producto en la primera consulta?¿Puedo establecer algún atributo en el DBML?

En esto mesa dice que los "valores de clave externa" son "visibles" en Linq To SQL, pero no sé qué significa esto.

Editar:Cambié el título porque no estoy muy seguro de que no haya solución.
No puedo creer que nadie tenga el mismo problema, es un escenario muy común.

¿Fue útil?

Solución 3

La solución la encuentro en esta otra pregunta. ¿Qué ORM .net puede hacer frente a este escenario?, que está relacionado con la liammclennan respuesta pero más clara (quizás la pregunta también fue más clara)

Otros consejos

Lo que está pidiendo es un nivel de optimización que linq-to-sql no proporciona.Creo que lo mejor que puedes hacer es crear una consulta que devuelva exactamente los datos que deseas, posiblemente como un tipo anónimo:

from order in DB.GetTable<Orders>()
join product in DB.GetTable<Products>()
on order.ProductID = product.ID
select new { ID = order.ID, Name = order.Name, ProductName = product.Name };

Si selecciona solo las columnas que desea en la consulta de LINQ y luego llama a .ToList() en la consulta, se ejecutará inmediatamente y solo recuperará las columnas que le interesan.Por ejemplo si haces esto:

var q = from p in dataContext.products select p.ProductName;
var results = q.ToList();

Obtendrá una lista de nombres de productos almacenados en los resultados y, cuando la consulta se ejecute en el servidor, solo devolverá la columna ProductName.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top