Я хочу найти директора школы по ключевому слову для поиска. У школ может быть список пользователей, один из которых играет главную роль.
Теперь моя проблема в том, что я реализую автоматический поиск, который берет ключевое слово и выполняет поиск на основе названия школы, кода и основного имени.
Код:
public class School : AuditableDataEntity<int>
{
[Required]
[MaxLength(200)]
public string Name { get; set; }
[MaxLength(150)]
public string Code { get; set; }
public District District { get; set; }
public ICollection<UserProfile> Users { get; set; }
}
public class UserProfile : AuditableDataEntity<Guid>
{
[Required]
[MaxLength(100)]
public string FirstName { get; set; }
[Required]
[MaxLength(100)]
public string LastName { get; set; }
[Required]
[MaxLength(200)]
public string Email { get; set; }
[MaxLength(50)]
public string PhoneWork { get; set; }
[MaxLength(20)]
public int PhoneWorkExt { get; set; }
[MaxLength(50)]
public string PhoneMobile { get; set; }
public UserLevel UserLevel { get; set; }
public UserRole UserRole { get; set; }
public UserDesignation UserDesignation { get; set; }
public School School { get; set; }
public int? SchoolId { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
Task<Response<IEnumerable<SchooSearchDTO>>> ISchoolQueryService.GetSchoolAutoCompleteData(string searchKeyword)
{
return _schoolQueryRepository.WithRelatedEntities().Where(x => x.Name.Contains(searchKeyword)
||x.Code.Contains(searchKeyword)
|| x.Users.FirstOrDefault(y => y.DataEntityState == DataEntityState.Published && y.UserDesignation == UserDesignation.Principal).FullName.Contains(searchKeyword)).OrderBy(u => u.Name).Select(z => new SchooSearchDTO
{
PrincipalName = z.Name,
CDSCode = z.Code
}).ToResponseListAsync();
}
Ошибка:
Выражение LINQ 'DbSet .Where (s => s.Name.Contains (__ searchKeyword_0) || s.CDSCode.Contains (__ searchKeyword_0) || DbSet .Where (u => EF.Property> (s, "Id")! = null && EF.Property> (s, "Id") == EF.Property> (u, "SchoolId")) .Where (u => (int) u.DataEntityState == 1 && (int) u.UserDesignation == 1) .Select (u => u.FullName) .FirstOrDefault (). Contains (__ searchKeyword_0)) 'не может быть переведено. Либо перепишите запрос в форме, которая может быть переведена, либо явно переключитесь на оценку клиента, вставив вызов AsEnumerable (), AsAsyncEnumerable (), ToList () или ToListAsync (). См. https://go.microsoft.com/fwlink/?linkid=2101038. для дополнительной информации.