Я пытаюсь вложить .Any()
в предложение .Where()
для запроса локального эмулятора CosmosDb.
Код выглядит следующим образом: где permittedStundentIds
- переменная (List<long>
), а a
- Document
в CosmosDb
.Where(a => permittedStudentIds.Any(sId => a.Students.Any(s => s.Id == sId)));
Когда я выполняю запрос, я получаю сообщение об ошибке:
Метод «Любой» не поддерживается. ActivityId: 800000a8-0002-d600-b63f-84710c7967bb, documentdb-dotnet-sdk / 1.22.0 Host / 64-разрядная версия MicrosoftWindowsNT / 10.0.16299.0
Я пробовал несколько вариантов, чтобы получить эквивалентное выражение, но безрезультатно. Единственное, что сработало, - это использование .Contains()
и жесткое кодирование индекса студентов; что невозможно, поскольку количество студентов может быть неизвестно.
.Where(a => permittedStudentIds.Contains(a.Students[0].Id));
Я понимаю, что некоторые лямбда-расширения еще не поддерживаются в Sql API для CosmosDb, но есть ли обходной путь для этого?
a => a.Students.Where(s => permittedStudentIds.Where(pSId => pSId == s.Id).Count() > 0).Count() > 0
. Не работает. Выдает аналогичное сообщение об ошибке, относящееся кWhere
не поддерживается - person bit   schedule 08.07.2018a => permittedStudentIds.Exists(sId => a.Students.Exists(s => s.Id == sId))
, не работает. Похожая ошибка. - person bit   schedule 08.07.2018