Проблема здесь в том, что EF не может перевести это в SQL.
x.Users.FirstOrDefault(y => y.DataEntityState == DataEntityState.Published && y.UserDesignation == UserDesignation.Principal).FullName.Contains(searchKeyword)
Поэтому попробуйте использовать Any
вместо выбора пользователя с FirstOrDefault
в LINQ, чтобы EF мог чтобы перевести это в SQL.
Task<Response<IEnumerable<SchooSearchDTO>>> ISchoolQueryService.GetSchoolAutoCompleteData(string searchKeyword)
{
return _schoolQueryRepository.WithRelatedEntities().Where(x => x.Name.Contains(searchKeyword)
||x.Code.Contains(searchKeyword)
|| x.Users.Any(y => y.DataEntityState == DataEntityState.Published && y.UserDesignation == UserDesignation.Principal && y.FirstName.Contains(searchKeyword))
).OrderBy(u => u.Name).Select(z => new SchooSearchDTO
{
PrincipalName = z.Name,
CDSCode = z.Code
}).ToResponseListAsync();
}
См .: Не удалось перевести выражение LINQ, и оно будет оценено локально
Редактировать:
Вам также необходимо использовать FirstName
, поскольку FullName
- это свойство, которого у вас нет в SQL.