Mapeo condicional de AutoMapper en C#

Mapeo condicional de AutoMapper en C#

Mapeador automático Asignación condicional en C# con ejemplos

En este artículo, voy a hablar sobre AutoMapper Asignación condicional en C# con ejemplos. Lea nuestro artículo anterior donde discutimos el Asignación inversa usando AutoMapper en C# con ejemplos Al final de este artículo, comprenderá qué es el mapeo condicional de AutoMapper y cuándo y cómo usar el mapeo condicional en C#.

¿Qué es AutoMapper? ¿Asignación condicional?

El AutoMapper en C# nos permite agregar condiciones a las propiedades del objeto de origen que deben cumplirse antes de que esa propiedad se asigne a la propiedad del objeto de destino. Por ejemplo, si queremos mapear una propiedad solo si su valor es mayor que 0, entonces en tal situación necesitamos usar C# AutoMapper Asignación condicional .

Ejemplo para entender el Mapeo Condicional en AutoMapeador

Entendamos el Mapeo Condicional usando automapper con un ejemplo. Vamos a utilizar las siguientes dos clases en esta demostración.

Requisito comercial:
  1. Necesitamos mapear el Nombre propiedad del Producto clase al itemName propiedad del ProductDTO clase solo si el valor Nombre comienza con la letra "A ”, de lo contrario, asigne el OptionalName valor de propiedad del Producto clase con el ItemName propiedad del ProductDTO clase.
  2. Si la Cantidad el valor es mayor que 0 entonces solo asignelo a la ItemQuantity
  3. Del mismo modo, si la Cantidad el valor es mayor que 100, entonces solo asígnelo a la Cantidad propiedad de la clase ProductDTO.

Para lograr esto, necesitamos usar el mapeo condicional de AutoMapper. Por lo tanto, inicializa la configuración del asignador como se muestra a continuación para usar la asignación condicional de C# AutoMapper.

La Condición La opción en AutoMapper se usa para agregar condiciones a las propiedades que deben cumplirse antes de que esa propiedad se mapee. El MapaDesde se utiliza para realizar las asignaciones personalizadas de miembros de origen y destino.

A continuación se muestra el código completo.
using System;
using AutoMapper;
namespace AutoMapperDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var mapper = InitializeAutomapper();

            Product product = new Product()
            {
                ProductID = 101,
                Name = "Led TV",
                OptionalName = "Product name not start with A",
                Quantity = -5,
                Amount = 1000
            };

            var productDTO = mapper.Map<Product, ProductDTO>(product);
            
            Console.WriteLine("After Mapping : Product");
            Console.WriteLine("ProductID : " + product.ProductID);
            Console.WriteLine("Name : " + product.Name);
            Console.WriteLine("OptionalName : " + product.OptionalName);
            Console.WriteLine("Quantity : " + product.Quantity);
            Console.WriteLine("Amount : " + product.Amount);
            Console.WriteLine();

            Console.WriteLine("After Mapping : ProductDTO");
            Console.WriteLine("ProductID : " + productDTO.ProductID);
            Console.WriteLine("ItemName : " + productDTO.ItemName);
            Console.WriteLine("ItemQuantity : " + productDTO.ItemQuantity);
            Console.WriteLine("Amount : " + productDTO.Amount);

            Console.ReadLine();
        }
        
        static Mapper InitializeAutomapper()
        {
            var config = new MapperConfiguration(cfg =>
            {
                cfg.CreateMap<Product, ProductDTO>()

                    //If the Name Start with A then Map the Name Value else Map the OptionalName value
                    .ForMember(dest => dest.ItemName, act => act.MapFrom(src =>
                        (src.Name.StartsWith("A") ? src.Name : src.OptionalName)))

                    //Take the quantity value if its greater than 0
                    .ForMember(dest => dest.ItemQuantity, act => act.Condition(src => (src.Quantity > 0)))

                    //Take the amount value if its greater than 100
                    .ForMember(dest => dest.Amount, act => act.Condition(src => (src.Amount > 100)));
            });

            var mapper = new Mapper(config);
            return mapper;
        }
    }

    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string OptionalName { get; set; }
        public int Quantity { get; set; }
        public int Amount { get; set; }
    }
    public class ProductDTO
    {
        public int ProductID { get; set; }
        public string ItemName { get; set; }
        public int ItemQuantity { get; set; }
        public int Amount { get; set; }
    }
}
Cuando ejecuta la aplicación, muestra el siguiente resultado

Nota: El mapeo condicional de C# AutoMapper es uno de los conceptos importantes de Automapper que se utiliza en la mayoría de los proyectos en tiempo real.

En el próximo artículo, voy a discutir cómo usar la propiedad Ignorar de AutoMapper en C# . Aquí, en este artículo, intento explicar la asignación condicional de AutoMapper  en C# con algunos ejemplos. Espero que este artículo te ayude con tu necesidad. Me gustaría tener sus comentarios. Publique sus comentarios, preguntas o comentarios sobre este artículo.