【发布时间】:2013-04-13 22:18:39
【问题描述】:
我找到了两种忽略非映射属性的解决方案,但 one of them 也忽略了常规映射,并且 second 不能与 QueryableExtensions 一起返回 IQueryable(不知道为什么,但我明白了错误参数类型不匹配)。
是否有人有解决方案来忽略涵盖上述两个方面的非映射属性?
【问题讨论】:
-
只是信息性评论,IQueryable 是否适用于其他 AutoMapper 地图?您不想“实现” IQueryable 的结果而不是尝试复制到 DTO 吗?将某些内容映射到 IQueryable 似乎不像您想要做的,因为您的 DTO 通常跨越流程边界或作为 JSON 提供。
-
您使用的是什么版本的 AutoMapper,您映射的是什么类型的 IQueryable 表达式? LINQ to SQL,LINQ to EF,其他?
-
@CodeMonkeyKing 我今天早些时候已经在阅读 (github.com/AutoMapper/AutoMapper/issues/163) 后更新到最新的 2.2.1,但没有运气(仍然是同样的错误)。 IQueryable 适用于其他地图,包括使用“IgnoreAllUnmapped”地图。我不想“实现” IQueryable,否则它会带来一堆不必要的数据,因为我将从存储库中的 GetAll() 或 Table() 调用。
-
我将我的测试平台回滚到 2.1.262 以尝试复制您的问题,看看我是否可以让 IgnoreAllNonExisting 工作。
-
这是我给你的唯一建议:尝试在未映射的属性名称上使用循环内的 CanResolveValue():
if (existingMaps.GetPropertyMaps().Any(pm => pm.CanResolveValue() && pm.SourceMember.Name == property)) { expression.ForMember(property, opt => opt.Ignore()); }
标签: c# automapper iqueryable