我有一个循环,它使用AutoMapper将对象A
和B
的两个不同示例Map到第三个对象C
的新示例中。对象C
包含A
和B
的所有字段。
换句话说,它们可以像这样:
class A
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
class B
{
public DateTime TimeOfBirth { get; set; }
}
// A & B combined
class C
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime TimeOfBirth { get; set; }
}
目前我有一个循环,它使用AutoMapper首先将A
Map到C
,然后将B
Map到结果,如下所示:
List<C> output = new();
foreach (var a in listA)
{
C result = _mapper.Map<C>(a);
_mapper.Map<B, C>(listB.Single(b => b.Id == a.ForeinKey), result);
output.Add(result);
}
我想用Linq来完成这个任务。我最初的想法是使用Zip method,但是我不能让它和AutoMapper一起工作。我希望它看起来像下面这样,但是我不能让它工作(它不能编译):
var output = _mapper.Map<C>(listA).Zip(_mapper.Map<C>(listB));
我错过了什么?有没有可能做我正在尝试的事情-而不制造更大的混乱?
2条答案
按热度按时间1zmg4dgp1#
因为你想第二次做一个就地Map,你仍然需要调用
Map<B, C>(b, existingC)
。为此你可以使用Zip
重载,带一个选择器函数:piok6c0g2#
在这种情况下,必须使用Join: