Исключение LINQ NotSupportedOperation с кодом First

91
9

У меня есть DbSet из контактов, и я пытаюсь выполнить следующий запрос:

from contact in Context.Contacts 
where contact.Equals("given contact")
select contact;

Я получаю NotSupportedOperationException что система не может создавать нескалярные типы, такие как целые числа или строки или идентификаторы GUID.
Как я могу выполнить один и тот же запрос эффективно, не извлекая все записи из базы данных (например, выполнить операцию фильтрации в базе данных SQL-сервера)?

ПРИМЕЧАНИЕ. Я переопределил метод Equals в типе Contact.

спросил(а) 2021-01-19T17:20:31+03:00 9 месяцев, 1 неделя назад
1
Решение
102

Entity Framework не может перевести вызов Equals в код SQL. Просто выполните ручное сравнение свойств:

from contact in Context.Contacts 
where contact.Id == givenContact.Id
select contact;

Другая (очень медленная) опция - выборка всех контактов из базы данных и сравнение в памяти:

Context.Contacts.ToList().Where(contact.Equals(givenContact)); 

ответил(а) 2021-01-19T17:20:31+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема