0

我找到了两种忽略非映射属性的解决方案,但其中一个也忽略了常规映射,第二个不适用于QueryableExtensions以返回 IQueryable(不知道为什么,但我收到错误Argument types do not match)。

有没有人有解决方案来忽略涵盖上述两个方面的非映射属性?

4

3 回答 3

3

使用QueryableExtensions时,您必须明确地进行某些类型转换,例如int?to int。这可能是“参数类型不匹配”异常的来源。

如果您有许多需要类型转换的属性(例如,如果您发现您正在执行许多其他属性),则c.MyVariable ?? 0可以改为定义转换规则,而不必明确说明每个属性。

通常,要在 Automapper 中进行类型转换,您会使用ConvertUsing,但在使用 QueryableExtensions 时,您需要改为使用ProjectUsing.

您可以使用以下行,它将处理从int?到的所有映射,int而无需显式指定每个属性的映射:

cfg.CreateMap<int?, int>().ProjectUsing(src => src.HasValue ? src.Value : 0);
于 2016-04-07T20:28:37.183 回答
2

在映射结束时与.ForAllOtherMembers(opt => opt.Ignore());为我工作的链接。这应该是方法链中的最后一个方法。

于 2020-08-12T17:25:23.263 回答
1

问题解决了。在这行代码中

.ForMember(p => p.Gender, opt => opt.MapFrom(c => c.GenderCode))

其中 p.Gender 是 int 类型,而 GenderCode 是 int? 类型。所以改变为

.ForMember(p => p.Gender, opt => opt.MapFrom(c => c.GenderCode ?? 0))

解决了这个问题。难以排除故障的是,在我尝试返回 IQueryable 之前,上面的映射代码一直在工作。

于 2013-04-22T22:46:59.130 回答