Запрос ASP.NET LINQ DbSet.Join() не работает
Я пытаюсь запустить этот код здесь, в ASP.NET Entity Framework 7. Цель состоит в том, чтобы иметь здесь наиболее эффективное решение, которое должно быть JOIN, если база данных.
public async Task<List<Building>> GetAllAsync(string commaSeparatedBuildingIDs)
{
var buildingRefIDs = commaSeparatedBuildingIDs.Split(",").ToList();
return await semiSoftDbContext.Buildings
.Join(buildingRefIDs, building => building.ReferenceId, refID => refID, (building, id) => building)
.ToListAsync();
}
Я получаю следующую ошибку:
System.InvalidOperationException: выражение LINQ 'DbSet().Join(internal: __p_0, externalKeySelector: building => building.ReferenceId,innerKeySelector: refID => refID,resultSelector: (building, id) => building)' не может быть переведено . Либо перепишите запрос в форме, которую можно перевести, либо явно переключитесь на оценку клиента, вставив вызов «AsEnumerable», «AsAsyncEnumerable», «ToList» или «ToListAsync». См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации.`
Я уже пробовал несколько вариантов соединения и читал в Интернете, но там говорится, что ASP.Net должен работать с Join().
1 ответ
Вы не должны присоединяться здесь (при условии, что вы используете Entity Framework - AFAIK, он не обрабатывает довольно много операций с локальными коллекциями, такими как соединения), используйтеWhere
сContains
:
return await semiSoftDbContext.Buildings
.Where(b => buildingRefIDs.Contains(b.ReferenceId))
.ToListAsync();