Question

J'ai l'instruction Linq suivante:

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

Je m'attends à ce que cela pose la requête suivante:

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'

mais au lieu de cela, je reçois 3 requêtes distinctes qui sélectionnent toutes les lignes des tables. Je suppose que Linq est en train de filtrer les valeurs car j’obtiens les bonnes valeurs à la fin.

Le problème est que cela prend BEAUCOUP BEAUCOUP de temps, car il déroule toutes les lignes des trois tables.

Avez-vous des idées pour résoudre ce problème?

Était-ce utile?

La solution

Supprimez les .AsEnumerable () de la requête, car ceux-ci empêchent toute l'évaluation de la requête sur le serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top