Posiadam relację jedne-do-wielu. Company
-> Employees
. key
podany przez użytkownika jest frazą, która ma się znaleźć w nazwie firmy lub imieniu pracownika lub nazwisku, jest opcjonalny, jeśli nic nie wpisano zwracam pustą listę.
Mam takie zapytanie ale wygląda ono strasznie chociaż działa zgodnie z założeniami.
- Jak to lepiej zaimplementować w ef core?
- Obecnie użytkownik podaje jedno słowo po którym szukam, jak zrobić szukanie, jeśli danymi wejściowymi będzie tablica stringów?
- Jeśli dojdzie mi dodatkowe kryterium opcjonalne np. data zatrudnienia od-do to czy jest "łatwy" sposób, żeby połączyć dwa kryteria?
var result = _context.Companies
.Where(c => c.Name.Contains(criteria.Keyword) ||
c.Employees.Any(e => e.FirstName.Contains(criteria.Keyword) ||
e.LastName.Contains(criteria.Keyword)))
.Select(c => new Company
{
Id = c.Id,
Name = c.Name,
Employees = c.Employees.Where(e => e.FirstName.Contains(criteria.Keyword) ||
e.LastName.Contains(criteria.Keyword))
});
public class Company
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<Employee> Employess { get; set; }
}
// pracownik nie ma pola nawigacyjnego do firmy
public class Employee
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}