AutoMapper .ProjectTo() 方法的 IMongoQueryable 抛出错误

IMongoQueryable throwing error with AutoMapper .ProjectTo() method

下面的代码给出了这个错误。我最近切换到 MongoDb 而不是 Ef Core。似乎 automapper 没有在其中获取对象,而是序列化形式“{document}”或其他任何内容。找不到太多相关信息,也调试了自动映射器代码,但似乎无法弄清楚为什么会发生这种情况。

错误:

GetPartyFullName of type Application.Read.Common.Helpers.MapHelpers is not supported in the expression tree GetPartyFullName({document}).

var partiesList = await parties
            .OrderByDescending(x => x.Created)
            .ThenBy(x => x.Name) // this is IOrderedMongoQueryable
            //.AsQueryable() => not working either
            .ProjectTo<PartyDto>(_mapper.ConfigurationProvider)
            .PaginatedListAsync(request.PageNumber, request.PageSize);

映射

... code
profile.CreateMap<Party, PartyDto>()
            .ForMember(d => d.FullName, opt => opt.MapFrom(s => MapHelpers.GetPartyFullName(s)));
... more code

如有任何帮助,我们将不胜感激。

当您使用 .ProjectTo 扩展时,自动映射器会将其转换为 select 操作。

根据文档:The .ProjectTo<OrderLineDTO>() will tell AutoMapper’s mapping engine to emit a select clause to the IQueryable....

所以很可能 mongo 数据库查询转换器不支持您的 MapHelpers.GetPartyFullName 功能。尝试直接在 .MapFrom(...) 调用中重写您的映射。