Pregunta

Tengo la siguiente declaración de Linq:

(from order in Orders.AsEnumerable()
 join component in Components.AsEnumerable()
    on order.ORDER_ID equals component.ORDER_ID
 join detail in Detailss.AsEnumerable()
    on component.RESULT_ID equals detail.RESULT_ID
 where orderRestrict.ORDER_MNEMONIC == "MyOrderText"
 select new 
            {
                Mnemonic = detail.TEST_MNEMONIC,
                OrderID = component.ORDER_ID,
                SeqNumber = component.SEQ_NUM
            }).ToList()

Espero que esto publique la siguiente consulta:

select  *   
from    Orders ord (NoLock)   
        join Component comp (NoLock)
          on ord .ORDER_ID = comp.ORDER_ID
        join Details detail (NoLock)
          on comp.RESULT_TEST_NUM = detail .RESULT_TEST_NUM
where   res.ORDER_MNEMONIC = 'MyOrderText'

pero en su lugar obtengo 3 consultas separadas que seleccionan todas las filas de las tablas. Supongo que Linq está filtrando los valores porque al final obtengo los valores correctos.

El problema es que toma WAY WAY demasiado tiempo porque arrastra todas las filas de las tres tablas.

¿Alguna idea de cómo puedo solucionarlo?

¿Fue útil?

Solución

Elimine los .AsEnumerable () s de la consulta ya que evitan que se evalúe toda la consulta en el servidor.

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