Мы используем EFCore 3.1 и пытаемся построить запрос, используя Exists с помощью .Any(), который охватывает 2 свойства.
var selectionCriteria = someHugeList.Select(sh => new { sh.Id, sh.StatusCode }).ToList()
var resultsQry = _myContext.SomeClass
.Include(sc => sc.DetailRecords)
.Where(sc => selectionCriteria.Any(crit => crit.Id == sc.Id
&& crit.StatusCode == sc.StatusCode));
var results = await resultsQry.ToListAsync()
При выполнении этого запроса (даже с небольшим количеством (5 элементов) элементов критериев выбора он выдает следующее сообщение об ошибке;
System.InvalidOperationException: выражение LINQ «DbSet .Where(c => __selectionCriteria_0 .Any(crit => crit.Id == sc.Id && crit.StatusCode == sc.StatusCode))» не может быть переведено. Либо перепишите запрос в форме, которую можно перевести, либо явно переключитесь на оценку клиента, вставив вызов AsEnumerable(), AsAsyncEnumerable(), ToList() или ToListAsync(). См. https://go.microsoft.com/fwlink/?linkid=2101038. Чтобы получить больше информации.'
Кажется, проблема заключается в том, что в предложении .Any есть 2 свойства. Где существует в sql обычно может сделать это без проблем. EFCore, кажется, находит это трудным.
Кто-нибудь знает, как это решить?