Ответ 1
Вам необходимо выполнить два запроса к базе данных:
var IDs = (from a in db1.Table1
join b in db1.Table2 on a.Id equals b.Id
orderby a.Status
where b.Id == 1 && a.Status == "new"
select new a.Id).ToArray();
var query = from c in db2.Company
join a in IDs on c.Id equals a.Id
select new { Id = a.Id, CompanyId = c.CompanyId };
.ToArray()
имеет решающее значение. Это предотвращает попытку EF выполнить комбинированный запрос (который будет терпеть неудачу, поскольку он использует два разных контекста). Вы можете использовать .AsEnumerable()
, если вы предпочитаете хранить ленивую загрузку.
И ваш следующий вопрос:
Есть ли другой способ сделать запрос LINQ более оптимизированным? То есть, для выполнения действия в одном запросе LINQ?
Чтобы ваш исходный запрос был успешно запущен, он должен использовать только один контекст данных, что означает, что все данные должны быть доступны из одного EDMX, что, в свою очередь, означает одну строку соединения. Вы можете достичь нескольких способов:
- Если обе таблицы находятся в одной базе данных, добавьте их в один EDMX.
- Если они находятся в разных базах данных, но в том же экземпляре, создайте представление в одной из баз данных, которые выбирают из таблицы в другой базе данных, затем добавьте локальную таблицу и просмотрите один EDMX.
- Если они находятся на разных экземплярах/серверах, создали связанный сервер, затем создайте представление таблицы на связанном сервере, затем добавьте локальную таблицу и просмотрите один EDMX.