我有一个循环,它使用AutoMapper将两个不同的对象实例( A
& B
)映射到第三个对象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
映射到C
。然后将B
映射到结果中。如下所示:
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一起做这个。我最初的想法是使用拉链法,但我无法让它与AutoMapper一起工作。我希望它应该如下所示,但我无法让它工作(它不编译):
var output = _mapper.Map<C>(listA).Zip(_mapper.Map<C>(listB));
我遗漏了什么?你能不能做我想做的事--而不是制造更大的麻烦?
发布于 2022-11-17 14:27:30
由于您希望第二次执行就地映射,所以仍然需要调用Map<B, C>(b, existingC)
。为此,您可以使用过载选择器函数
var output = _mapper.Map<C>(listA)
.Zip(listB, (c, b) => _mapper.Map<B, C>(b, c));
发布于 2022-11-17 16:09:54
在这种情况下,您必须使用Join:
var output = listA
.Join(listB, a => a.ForeinKey, b => b.Id, (a, b) =>
_mapper.Map<B, C>(_mapper.Map<C>(a))
)
.ToList();
https://stackoverflow.com/questions/74476748
复制相似问题