Используя собственные типы в Entity Framework Core 2.2.6, как мне написать запрос LINQ, который действует на равенство собственного типа?
Я создаю приложение, которое использует DDD такие понятия, как Сущности и объекты стоимости. Например, Person имеет PersonName . PersonName является Объектом Значения, который предоставляет методы и операторы равенства.
public sealed class PersonConfiguration : IEntityTypeConfiguration<Person>
{
public void Configure(EntityTypeBuilder<Person> entity)
{
entity.HasKey(its => its.Id);
entity.OwnsOne(its => its.Name);
}
}
public class Person
{
private Person() { }
public Person(Guid id, PersonName name) => (Id, Name) = (id, name);
public Guid Id { get; private set; }
public PersonName Name { get; private set; }
}
public class PersonName
{
private PersonName() { }
public PersonName(string firstName, string lastName) => (FirstName, LastName) = (firstName, lastName);
public string FirstName { get; private set; }
public string LastName {get; private set; }
protected static bool EqualOperator(PersonName left, PersonName right)
{
// Omitted: equality check
}
protected static bool NotEqualOperator(PersonName left, PersonName right)
{
// Omitted: inequality check
}
public override bool Equals(object? obj)
{
// Omitted: equality check
}
public override int GetHashCode()
{
// Omitted: hashcode algorithm
}
}
В качестве примера мне нужно найти всех людей в моей базе данных, которые имеют одинаковые сначала и фамилия.
Что я пробовал:
private readonly PersonContext Db = new PersonContext();
public IEnumerable<Person> FindByName(PersonName name)
{
return from person in Db.People
where person.Name == name
select person;
}
---
var johnDoes = FindByName(new PersonName("John", "Doe"));
Это компилируется и запускается, но возвращает пустую коллекцию.