Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射显式扩展和默认值_C#_Asp.net Web Api2_Automapper - Fatal编程技术网

C# 自动映射显式扩展和默认值

C# 自动映射显式扩展和默认值,c#,asp.net-web-api2,automapper,C#,Asp.net Web Api2,Automapper,使用Automapper,您可以设置需要的属性。使用此选项,如果查询没有显式请求扩展此属性,Automapper将不会映射字段,并且它将为null 我要寻找的是一种在这种情况下提供默认值的方法。具体来说,当此选项应用于表示集合的属性时(如果未展开),我希望返回键标识符列表,而不是返回null Automapper确实提供了一些设置功能,但它似乎只支持静态值。在这种情况下,这将不起作用,因为直到请求时才知道数据的收集情况 另外,我使用动态作为目标类型,因此int数组与复杂对象数组之间的差异应该不是

使用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试试。