Мы используем 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 items) элементов критериев выбора: выдается следующее сообщение об ошибке:
System.InvalidOperationException: выражение LINQ 'DbSet .Where (c => __selectionCriteria_0 .Any (crit => crit.Id == s c .Id && crit.StatusCode == s c .StatusCode)) 'не может быть переведен. Перепишите запрос в форме, которую можно перевести, или переключитесь на оценку клиента явным образом, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList () или ToListAsyn c (). Для получения дополнительной информации см. https://go.microsoft.com/fwlink/?linkid=2101038. '
Кажется, проблема заключается в Тот факт, что в предложении .Any есть 2 свойства. A, где существует в sql, обычно может сделать это без проблем. Кажется, что EFCore затрудняется.
У кого-нибудь есть идеи, как решить эту проблему? s?