Jointure entre dans la mémoire de collecte et de EntityFramework

Est-il un mécanisme pour faire une JOINTURE entre une collection en mémoire et entity framework, tout en préservant l'ordre.

Ce que je suis en train est

var itemsToAdd = 
  myInMemoryList.Join(efRepo.All(), listitem => listitem.RECORD_NUMBER,
  efRepoItem => efRepoItem.RECORD_NUMBER, (left, right) => right);

qui me donne l', assez curieusement intitulé "Cette méthode prend en charge le LINQ to entities infrastructure et n'est pas destiné à être utilisé directement à partir de votre code." erreur.

Maintenant, bien sûr, je peux le faire de manière itérative avec quelque chose comme

        foreach (var item in myInMemoryList)
        {
            var ho = efRepo.Where(h => h.RECORD_NUMBER == item.RECORD_NUMBER).FirstOrDefault();
            tmp.Add(ho);
        }

mais c'est un N+1 de la requête. Qui est méchant comme myInMemoryList est assez grande!

Resharper peut refactoriser que pour moi, à

        tmp = (from TypeOfItemInTheList item in myInMemoryList 
           select efRepo.Where(h => h.RECORD_NUMBER == item.RECORD_NUMBER)
           .FirstOrDefault());

ce qui je pense est encore en train de faire N+1 requêtes. Ainsi, toutes les idées pour une meilleure approche pour obtenir de l'ef entités qui correspondent (sur le champ de clé) avec une collection en mémoire. Le jeu doit être dans le même ordre que la collection en mémoire a été.

OriginalL'auteur Andiih | 2011-07-01