У меня ошибка в automapper при отображении выражения - PullRequest
0 голосов
/ 02 августа 2020

У меня есть следующий код, который работает без ошибок, пока я не раскомментирую прокомментированную строку.

var viewModel = new ArticlesListViewModel
            {
                Articles = await _context.Articles.Select(article =>

                    _mapper.Map<ArticleLookupModel>(article)

                )
               // .Where(x => x.Title.ToLower().Contains(request.PagingModel.QueryFilter.ToLower()))
               .Skip((request.PagingModel.PageNumber - 1) * request.PagingModel.PageSize).Take(request.PagingModel.PageSize)
               .ToListAsync(cancellationToken)
            };

Если я раскомментировал, при сопоставлении я получаю следующее исключение:

The LINQ expression 'DbSet<Article>
    .Where(a => ___mapper_0.Map<ArticleLookupModel>(a).Title.ToLower().Contains(__ToLower_1))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync().

Мой профиль автомаппера следующий, где свойство Title - это не что иное, как обычная строка:

public class ArticleProfile : Profile
    {
        public ArticleProfile() 
        {
            CreateMap<Article, ArticleLookupModel>()
                .ForMember(title=>title.Title, conf=>conf.MapFrom(dto=>dto.Title));
        }
    }

Я знаю, что мне нужно где-то объявить что-то вроде этого (я не уверен если он правильный или полный)

  Expression<Func<Article, bool>> dtoExpression = dto => dto.Title.ToLower().Contains(request.PagingModel.QueryFilter.ToLower());
        var expression = _mapper.Map<Expression<Func<ArticleLookupModel, bool>>>(dtoExpression);

Я хочу провести сравнение строк, игнорируя регистр (вот почему я вызываю метод ToLower ()). Однако я не знаю, что мне делать с этими двумя строками кода, как добавить его в конфигурацию.

Может кто-нибудь? Я хочу выполнить сопоставление при создании списка асинхронно для повышения производительности. Я не хочу, чтобы я создавал список сопоставленных моделей, а затем повторял его снова и принимал то, что соответствует моему состоянию.

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...