Skip to content

T_CodeJam_Mapping_Map

andrewvk edited this page Jun 24, 2016 · 9 revisions

Map Class

Mapper helper class.

Inheritance Hierarchy

System.Object
  CodeJam.Mapping.Map
Namespace: CodeJam.Mapping
Assembly: CodeJam (in CodeJam.dll) Version: 1.0.0.0 (1.0.0.0)

Syntax

C#

public static class Map

VB

Public NotInheritable Class Map

F#

[<AbstractClassAttribute>]
[<SealedAttribute>]
type Map =  class end

Methods

 

Name Description
Public methodStatic member GetMapper(TFrom, TTo)() Returns a mapper to map an object of TFrom type to an object of TTo type.
Public methodStatic member GetMapper(TFrom, TTo)(Func(MapperBuilder(TFrom, TTo), MapperBuilder(TFrom, TTo))) Returns a mapper to map an object of TFrom type to an object of TTo type.
  Back to Top

Examples

This example shows how to map one object to another.

using System;

using CodeJam.Expressions;
using CodeJam.Strings;

using NUnit.Framework;

#pragma warning disable 649

namespace CodeJam.Mapping.Examples
{
    [TestFixture]
    public class MapTests
    {
        class Class1
        {
            public int    Prop1 { get; set; }
            public string Field1;
        }

        class Class2
        {
            public string    Prop1 { get; set; }
            public DateTime? Field1;
        }

        static readonly Mapper<Class1,Class2> _class1ToClass2Mapper = Map.GetMapper<Class1,Class2>();

        [Test]
        public void Test1()
        {
            // Create new Class2 and map Class1 to it.
            //
            var c2 = _class1ToClass2Mapper.Map(
                new Class1
                {
                    Prop1  = 41,
                    Field1 = "2016-01-01"
                });

            Assert.That(c2.Prop1,        Is.EqualTo("41"));
            Assert.That(c2.Field1?.Year, Is.EqualTo(2016));

            var expr = _class1ToClass2Mapper.GetMapperExpressionEx();

            Assert.That(
                expr.GetDebugView().Remove(" ", "\t", "\r", "\n", "CodeJam.Mapping.Examples.MapTests+"),
                Is.EqualTo(@"
                    .Lambda #Lambda1<System.Func`2[Class1,Class2]>(Class1 $from)
                    {
                        .New Class2()
                        {
                            Prop1  = .Call ($from.Prop1).ToString(),
                            Field1 = .If ($from.Field1 != null)
                            {
                                (System.Nullable`1[System.DateTime]).Call System.DateTime.Parse(
                                    $from.Field1,
                                    null,
                                    .Constant<System.Globalization.DateTimeStyles>(NoCurrentDateDefault))
                            } .Else {
                                null
                            }
                        }
                    }".Remove(" ", "\t", "\r", "\n")));
        }

        [Test]
        public void Test2()
        {
            var c2 = new Class2();

            // Map Class1 to existing Class2.
            //
            _class1ToClass2Mapper.Map(
                new Class1
                {
                    Prop1  = 41,
                    Field1 = "2016-01-01"
                }, c2);

            Assert.That(c2.Prop1,        Is.EqualTo("41"));
            Assert.That(c2.Field1?.Year, Is.EqualTo(2016));

            var expr = _class1ToClass2Mapper.GetMapperExpression();

            Assert.That(
                expr.GetDebugView().Remove(" ", "\t", "\r", "\n", "CodeJam.Mapping.Examples.MapTests+"),
                Is.EqualTo(@"
                    .Lambda #Lambda1<System.Func`4[
                        Class1,
                        Class2,
                        System.Collections.Generic.IDictionary`2[System.Object,System.Object],
                        Class2]>
                        (
                            Class1 $from,
                            Class2 $to,
                            System.Collections.Generic.IDictionary`2[System.Object,System.Object] $dic1
                        )
                    {
                        (Class2)(.Call CodeJam.Mapping.ExpressionBuilderHelper.GetValue($dic1,$from)
                        ??
                        .Block(Class2 $obj2)
                        {
                            $obj2 = .If ($to == null) { .New Class2() } .Else { $to };

                            .Call CodeJam.Mapping.ExpressionBuilderHelper.Add($dic1, $from, $obj2);

                            $obj2.Prop1  = .Call ($from.Prop1).ToString();

                            $obj2.Field1 = .If ($from.Field1 != null)
                            {
                                (System.Nullable`1[System.DateTime]).Call System.DateTime.Parse(
                                    $from.Field1,
                                    null,
                                    .Constant<System.Globalization.DateTimeStyles>(NoCurrentDateDefault))
                            }
                            .Else
                            {
                                null
                            };

                            $obj2
                        })
                    }".Remove(" ", "\t", "\r", "\n")));
        }
    }
}

See Also

Reference

CodeJam.Mapping Namespace

Clone this wiki locally