C# 自动映射显式扩展和默认值
使用Automapper,您可以设置需要的属性。使用此选项,如果查询没有显式请求扩展此属性,Automapper将不会映射字段,并且它将为null 我要寻找的是一种在这种情况下提供默认值的方法。具体来说,当此选项应用于表示集合的属性时(如果未展开),我希望返回键标识符列表,而不是返回null Automapper确实提供了一些设置功能,但它似乎只支持静态值。在这种情况下,这将不起作用,因为直到请求时才知道数据的收集情况 另外,我使用动态作为目标类型,因此int数组与复杂对象数组之间的差异应该不是问题,我认为 我尝试实现的快速示例,成员需要显式扩展C# 自动映射显式扩展和默认值,c#,asp.net-web-api2,automapper,C#,Asp.net Web Api2,Automapper,使用Automapper,您可以设置需要的属性。使用此选项,如果查询没有显式请求扩展此属性,Automapper将不会映射字段,并且它将为null 我要寻找的是一种在这种情况下提供默认值的方法。具体来说,当此选项应用于表示集合的属性时(如果未展开),我希望返回键标识符列表,而不是返回null Automapper确实提供了一些设置功能,但它似乎只支持静态值。在这种情况下,这将不起作用,因为直到请求时才知道数据的收集情况 另外,我使用动态作为目标类型,因此int数组与复杂对象数组之间的差异应该不是
GET: www.myapi.com/goups/3?$expand=members returns-
{
"id": 3,
"name":"GroupA",
"members": [
{ "id":1, "name":"Bob" },
{ "id":2, "name":"Sue" }
]
}
GET: www.myapi.com/goups/3 returns-
{
"id": 3,
"name":"GroupA",
"members": [1,2]
}
分两步进行,使用两个不同的映射,一个使用显式扩展,第二个使用默认值。这是一种逻辑方法,但我无法执行。我将IQueryables与ProjectTo一起使用,因此我不确定如何测试扩展成员。扩展的成员在上下文中似乎不可用,因此我无法在那里测试它们。我也不能测试null,因为查询还没有执行,并且不是所有null成员都是可扩展的。从源代码看,要展开的成员列表似乎用于直接修改可查询的表达式,因此,也许我可以在投影之后对表达式做些什么?在这方面不是很有经验。您必须具体化查询结果,然后检查null。否则,您将不得不忘记显式扩展,并使用MapFrom和ProjectTo参数自己实现所有内容。实际上,我认为它可以在不具体化的情况下工作,因为第一个ProjectTo的结果将不会包含排除列的值。在第二步中,您必须检查所有无法获取的列是否为null。您可能想先用LINQ,然后用AM来尝试。分两步进行,使用两种不同的映射,一个使用显式扩展,第二个使用默认值。这是一种逻辑方法,但我无法执行。我将IQueryables与ProjectTo一起使用,因此我不确定如何测试扩展成员。扩展的成员在上下文中似乎不可用,因此我无法在那里测试它们。我也不能测试null,因为查询还没有执行,并且不是所有null成员都是可扩展的。从源代码看,要展开的成员列表似乎用于直接修改可查询的表达式,因此,也许我可以在投影之后对表达式做些什么?在这方面不是很有经验。您必须具体化查询结果,然后检查null。否则,您将不得不忘记显式扩展,并使用MapFrom和ProjectTo参数自己实现所有内容。实际上,我认为它可以在不具体化的情况下工作,因为第一个ProjectTo的结果将不会包含排除列的值。在第二步中,您必须检查所有无法获取的列是否为null。你可能想先用LINQ试试,然后用AM试试。