我找到了两个忽略非映射属性的解决方案,但one of them也忽略了传统映射,second不能与QueryableExtensions一起返回IQueryable(don')知道原因,但我得到错误参数类型不匹配)。
有没有人有解决方案来忽略涵盖上述两个方面的非映射属性?
答案 0 :(得分:3)
使用QueryableExtensions时,您必须明确某些类型转化,例如int?
到int
。这可能是"参数类型不匹配的来源"异常。
如果您有许多需要进行类型转换的属性 - 例如,如果您有许多其他属性,您发现正在执行c.MyVariable ?? 0
- 您可以改为定义转换规则,而不必明确每一个属性。
通常,要在Automapper中进行类型转换,您可以使用ConvertUsing
,但在使用QueryableExtensions时,您需要使用ProjectUsing
。
您可以使用以下行,它将处理从int?
到int
的所有映射,而无需显式指定每个属性的映射:
cfg.CreateMap<int?, int>().ProjectUsing(src => src.HasValue ? src.Value : 0);
答案 1 :(得分: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。
答案 2 :(得分:1)
使用.ForAllOtherMembers(opt => opt.Ignore());
进行映射的末尾链对我很有效。这应该是方法链中的最后一个方法。