-
Notifications
You must be signed in to change notification settings - Fork 0
Merging expressions
jeuxjeux20 edited this page Apr 13, 2021
·
5 revisions
You can merge two new X { ... }
expressions with the Merge
extension method:
Expression<Func<Cat, CatDto>> catDtoExpression = x => new CatDto
{
Id = x.Id,
Name = x.Name
};
catDtoExpression.Merge(x => new CatDto
{
Name = x.Name + " is a great cat!",
CutenessLevel = x.CutenessLevel
});
This results in the following expression:
x => new CatDto
{
Id = x.Id,
Name = x.Name + " is a great cat!",
CutenessLevel = x.CutenessLevel
}
When encountering a new X { ... }
expression on both sides of an assignment, they both get merged as well:
Expression<Func<Person, PersonDto>> personDtoExpression = x => new PersonDto
{
Id = x.Id,
Cat = new CatDto
{
Id = x.Cat.Id,
Name = x.Cat.Name
}
};
personDtoExpression.Merge(x => new PersonDto
{
Cat = new CatDto
{
Name = x.Cat.Name + " is awesome!"
}
}),;
And this gives:
x => new PersonDto
{
Id = x.Id,
Cat = new CatDto
{
Id = x.Cat.Id,
Name = x.Cat.Name + " is awesome!" // !
}
}
This also works with IMapper<TInput, TSource>
, using the Merge
extension method as well:
var mergedMapper = catDtoMapper.Merge(x => new CatDto
{
Name = x.Name + " is a great cat!"
})
This methods merges the mapper's Expression
with the given expression, and creates a new mapper out of it (using the WithExpression
method, which creates an instance of the mapper with the specified expression).