Есть ли какой-либо механизм для выполнения JOIN между коллекцией в памяти и структурой сущностей с сохранением порядка.
Что Я пробую
var itemsToAdd =
myInMemoryList.Join(efRepo.All(), listitem => listitem.RECORD_NUMBER,
efRepoItem => efRepoItem.RECORD_NUMBER, (left, right) => right);
, который дает мне довольно любопытное название «Этот метод поддерживает инфраструктуру LINQ to Entities и не предназначен для использования непосредственно из вашего кода». Ошибка.
Теперь, конечно, я могу делать это итеративно с помощью что-то вроде
foreach (var item in myInMemoryList)
{
var ho = efRepo.Where(h => h.RECORD_NUMBER == item.RECORD_NUMBER).FirstOrDefault();
tmp.Add(ho);
}
, но это запрос N + 1. Что неприятно, поскольку myInMemoryList может быть довольно большим!
Resharper может реорганизовать его для меня до
tmp = (from TypeOfItemInTheList item in myInMemoryList
select efRepo.Where(h => h.RECORD_NUMBER == item.RECORD_NUMBER)
.FirstOrDefault());
, который, как я подозреваю, все еще выполняет запросы N + 1. Так что любой идеи для лучшего подхода к получению сущностей ef, которые совпадают (по ключевому полю) с коллекцией в памяти. Результирующий набор должен быть в том же порядке, что и коллекция в памяти.