'Map an Entity iEnumerator To Dto Enumerator

I am using CQRS. I select my Entities IEnumerator from database and i want to map this to my Dto class.

My Dto class:

public class XCollectionDto
{
    public IEnumerable<XReadDto> Entries { get; init; } = Enumerable.Empty<XReadDto>();
}

My mapper class:

public class XReadMapper : IEntityToDtoMapper<X, XCollectionDto>
{
    public XCollectionDto Map(IEnumerable <X> source, XCollectionDto target)
    {
        //todo

        Here i want to map source to target Entries list
    }
}

How can i do that, without a for loop? I am not using AutoMaper, the mapping is manual



Solution 1:[1]

I think you could accompish your purpose with C# reflection

I created the two class for test:

public class somemodel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<int> Numlist { get; set; }
    }

 public class somemodelDTO
    {
        public int Id { get; set; }
        public string SomeName { get; set; }
        public List<int> Numlist { get; set; }
    }

the method to bind properties of somemodelDTO which have the same name with properties of somemodel:

private static somemodelDTO GetMap<somemodel, somemodelDTO>(somemodel some)
        {
            somemodelDTO somemDTO = Activator.CreateInstance<somemodelDTO>();
            var typesource = some.GetType();
            var typedestination = typeof(somemodelDTO);
            foreach(var sp in typesource.GetProperties())
            {
                foreach( var dp in typedestination.GetProperties())
                {
                     if(sp.Name==dp.Name)
                    {
                        dp.SetValue(somemDTO, sp.GetValue(some, null), null);
                    }
                }
            }
            return somemDTO;
        }

The result? enter image description here enter image description here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ruikai Feng