Существует ли какой-либо механизм для выполнения 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 может быть довольно большим!
Решарпер может рефакторинг, что для меня
tmp = (from TypeOfItemInTheList item in myInMemoryList
select efRepo.Where(h => h.RECORD_NUMBER == item.RECORD_NUMBER)
.FirstOrDefault());
, который я подозреваю, все еще выполняет N + 1 запросов. Так что любые идеи для лучшего подхода к получению сущностей ef, которые (в ключевом поле) соответствуют коллекции в памяти. Результирующий набор должен быть в том же порядке, что и коллекция в памяти.