Mappatura condizionale di AutoMapper in C#

Mappatura condizionale di AutoMapper in C#

AutoMapper Mappatura condizionale in C# con esempi

In questo articolo parlerò di AutoMapper Mappatura condizionale in C# con esempi. Si prega di leggere il nostro articolo precedente in cui abbiamo discusso del Mappatura inversa utilizzando AutoMapper in C# con esempi. Alla fine di questo articolo, capirai cos'è la mappatura condizionale di AutoMapper e quando e come utilizzare la mappatura condizionale in C#.

Cos'è AutoMapper Mappatura condizionale?

L'AutoMapper in C# ci consente di aggiungere condizioni alle proprietà dell'oggetto di origine che devono essere soddisfatte prima che quella proprietà venga mappata alla proprietà dell'oggetto di destinazione. Ad esempio, se vogliamo mappare una proprietà solo se il suo valore è maggiore di 0, in una situazione del genere dobbiamo usare C# AutoMapper Mappatura condizionale .

Esempio per comprendere la mappatura condizionale in AutoMapper

Comprendiamo la mappatura condizionale usando automapper con un esempio. Utilizzeremo le seguenti due classi in questa demo.

Requisito aziendale:
  1. Dobbiamo mappare il Nome proprietà del Prodotto classe a itemName proprietà del ProductDTO classe solo se il valore Nome inizia con la lettera "A ”, else Mappa il NomeOpzionale valore della proprietà del Prodotto classe con ItemName proprietà del ProductDTO classe.
  2. Se la Quantità il valore è maggiore di 0 quindi mappalo solo su ItemQuantity
  3. Allo stesso modo, se l'Importo il valore è maggiore di 100, quindi mappalo solo su Importo proprietà della classe ProductDTO.

Per raggiungere questo obiettivo dobbiamo utilizzare la mappatura condizionale di AutoMapper. Quindi inizializza la configurazione del mappatore come mostrato di seguito per utilizzare la mappatura condizionale di AutoMapper C#.

La condizione L'opzione in AutoMapper viene utilizzata per aggiungere condizioni alle proprietà che devono essere soddisfatte prima che quella proprietà venga mappata. La MappaDa viene utilizzata per eseguire le mappature personalizzate dei membri di origine e destinazione.

Di seguito è riportato il codice 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; }
    }
}
Quando esegui l'applicazione, viene visualizzato il seguente output

Nota: Il mapping condizionale di AutoMapper C# è uno dei concetti importanti di Automapper utilizzato nella maggior parte dei progetti in tempo reale.

Nel prossimo articolo, parlerò di come utilizzare la proprietà Ignora di AutoMapper in C# . Qui, in questo articolo, provo a spiegare Mappatura condizionale di AutoMapper  in C# con alcuni esempi. Spero che questo articolo ti aiuti con la tua esigenza. Mi piacerebbe avere il tuo feedback. Pubblica il tuo feedback, domanda o commenti su questo articolo.