Если я загрузить объект через Entity Framework, и сохраняются его позже использовать - например, в фильтре равенства - Entity Framework выдает следующее сообщение об ошибке:Как упорядочить сравнение равенства объектов памяти в условии Entity Framework?
Unable to create a constant value of type 'MyType'. Only primitive types or enumeration types are supported in this context.
Это может затем быть легко решена с помощью идентифицирующий значение/значение на MyType
, например .Where(x => x.Name == MyTypeMemoryInstance.Name)
.
Однако мне было интересно, есть ли альтернатива, позволяющая сравнивать равенство без необходимости предоставления примитивного типа, поэтому я могу сделать .Where(x => x == MyTypeMemoryInstance)
вместо этого и все еще делать это в SQL, а не в памяти.
Концептуально это можно решить, если я могу предоставить перевод LINQ-to-SQL с использованием определенного примитивного типа для использования для данного типа, аналогичного переопределению регулярного сравнения равенства в C#, но я не знаю, это действительно возможно. Спасибо.
Спасибо - да, я знаю, о сравнении в памяти, но на самом деле хотел, чтобы автоматизировать этот процесс в переводе SQL вместо , По сути, я надеялся, что провайдер LINQ to SQL сможет узнать (через IComparer, атрибут и т. Д.) То, что я хочу использовать для сравнения равенства, и использовать это при разрешении выражения сравнения равенства. – Alex
Я боюсь, что сравнение невозможно на уровне сервера :(Но почему вы не можете сравнивать свойства множественности с обоих объектов вместо сравнения экземпляров? Насколько я знаю, он еще не существует, что позволяет вам определить, как лечить/перевести экземпляр объекта для сравнения в sql – octavioccl