Использование «.Any ()» в запросе lmbda приводит к ошибке в. net основном проекте EF - PullRequest
1 голос
/ 08 апреля 2020

У меня есть этот запрос ниже, в котором выдает ошибку ниже, упомянутую, Он работал в другом проекте, но не мог работать в. net основной проект.

var lstAppForm = await _appDBContext.ApplicationForms.Where(qr => appFormViewModel.Any(any => any.kycId == qr.id )).ToListAsync();

Не удалось перевести выражение LINQ «DbSet .Where (a => __appFormViewModel_0 .Any (any => any.kycId == a.id))». Либо переписать запрос в форме, которую можно перевести, либо явно переключиться на оценку клиента, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c (). См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации.

1 Ответ

4 голосов
/ 08 апреля 2020

Проблема в том, что выражение не переводится в sql, поскольку appFormViewModel не является сущностью в вашей базе данных. это ваша модель представления для пользовательского интерфейса, которая не имеет ничего общего с базой данных, поэтому она никоим образом не должна быть частью вашего запроса EF.

Что мы можем сделать, так это проецировать необходимые данные вне запроса EF, используя Select и затем используем его в запросе Linq для EF:

var ids = appFormViewModel.Select(x => x.kycId).ToList();

var lstAppForm = await _appDBContext.ApplicationForms
                      .Where(qr => ids.Contains(qr.id))
                      .ToListAsync();

или:

var ids = appFormViewModel.Select(x => x.kycId).ToList();

var lstAppForm = await _appDBContext.ApplicationForms
                      .Where(qr => ids.Any(a => a == qr.id))
                      .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...