Запрос 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();
Другие вопросы по тегам