Tutorials C# Programming Tutorial

Fixed & Dynamic Destination Values — Complete Guide

Fixed & Dynamic Destination Values — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of C# Programming Tutorial on Toolliyo Academy.

On this page

C# Programming Tutorial · Lesson 186 of 240

Fixed & Dynamic Destination Values

Beginner ✓Intermediate ✓Advanced ✓Professional

Professional · 4 — Architecture & jobs · ~28 min read · Module 14: AutoMapper & Advanced Features

1. Introduction

Professional lesson: Fixed & Dynamic Destination Values. You will see how large .NET systems are structured. Build understanding one concept at a time — do not rush the architecture modules. Sometimes the destination property does not come directly from a source field. AutoMapper lets you set a fixed (constant) value — like a default currency code — or compute a dynamic value from the source object, HTTP context, or injected services. API DTOs often need fields the database entity does not have: formatted labels, tenant names, audit timestamps, or flags like IsExported. Fixed and dynamic mapping avoids manual assignment in every controller action.

For values from DI (ICurrentUserService, IHttpContextAccessor), register custom IValueResolver or use AfterMap. Avoid capturing heavy services inside MapFrom lambdas in hot loops — resolvers are clearer and testable.

2. Real-world story

Seller order DTOs need a fixed marketplace code (AMZ-IN), a dynamic status label built from flags, and a computed commission — fields that do not exist on the raw Order entity. AutoMapper ForMember handles all three without cluttering the controller.

3. Problem without this concept

If you ignore Fixed & Dynamic Destination Values, this is what teams struggle with:

  • Duplicate logic and unclear structure
  • Harder onboarding for new developers
  • More bugs found only in production

4. Definition

Sometimes the destination property does not come directly from a source field. AutoMapper lets you set a fixed (constant) value — like a default currency code — or compute a dynamic value from the source object, HTTP context, or injected services.

5. Why do we need it?

API DTOs often need fields the database entity does not have: formatted labels, tenant names, audit timestamps, or flags like IsExported. Fixed and dynamic mapping avoids manual assignment in every controller action. When API DTOs differ from EF Core entities and manual mapping gets tedious.

6. Where is it used?

  • API DTO mapping
  • Report view models
  • Integration adapters
  • Map EF entities to DTOs so API responses do not leak database shape.
  • Profile mapping in hot paths — manual mapping is sometimes faster.

7. How it works

  • ForMember targets one destination property.
  • MapFrom accepts a lambda: use s => when reading the source, _ => when the value is fixed or comes from elsewhere.
  • Constants like "INR" are fixed; PriceLabel and MappedAtUtc are dynamic because they change per object or per mapping call.

8. Syntax

Core syntax pattern for Fixed & Dynamic Destination Values:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = "";
    public decimal Price { get; set; }
}
public class ProductDto
{
SyntaxMeaning
// Install: dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjectionComment — notes for humans; compiler ignores it.
public class ProductDefines a type — blueprint for objects or contracts.
{Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public int Id { get; set; }Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public string Name { get; set; } = "";Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public decimal Price { get; set; }Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.

9. Beginner example

Copy into a console project (dotnet new consoledotnet run).

// Install: dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = "";
    public decimal Price { get; set; }
}

public class ProductDto
{
    public int Id { get; set; }
    public string Name { get; set; } = "";
    public decimal PriceInr { get; set; }
    public string Currency { get; set; } = "";
    public string PriceLabel { get; set; } = "";
    public DateTime MappedAtUtc { get; set; }
}

public class ProductProfile : Profile
{
    public ProductProfile()
    {
        CreateMap<Product, ProductDto>()
            // Fixed value — same for every mapped row
            .ForMember(d => d.Currency, opt => opt.MapFrom(_ => "INR"))
            // Dynamic value — computed from source
            .ForMember(d => d.PriceInr, opt => opt.MapFrom(s => s.Price))
            .ForMember(d => d.PriceLabel, opt => opt.MapFrom(s => $"₹{s.Price:N2}"))
            // Dynamic value — not from source at all (runtime clock)
            .ForMember(d => d.MappedAtUtc, opt => opt.MapFrom(_ => DateTime.UtcNow));
    }
}

Line-by-line

CodeWhat it means
// Install: dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjectionComment — notes for humans; compiler ignores it.
public class ProductDefines a type — blueprint for objects or contracts.
{Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public int Id { get; set; }Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public string Name { get; set; } = "";Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public decimal Price { get; set; }Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
}Closes a block started earlier.
public class ProductDtoDefines a type — blueprint for objects or contracts.
{Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public int Id { get; set; }Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public string Name { get; set; } = "";Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public decimal PriceInr { get; set; }Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public string Currency { get; set; } = "";Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.
public string PriceLabel { get; set; } = "";Part of the Fixed & Dynamic Destination Values example — read with surrounding lines.

10. Real project example

Seller order DTOs need a fixed marketplace code (AMZ-IN), a dynamic status label built from flags, and a computed commission — fields that do not exist on the raw Order entity. AutoMapper ForMember handles all three without cluttering the controller.

Production-style C#

public class Order { public int Id { get; set; } public decimal Amount { get; set; } public bool IsFulfilled { get; set; } }
public class OrderDto { public int Id { get; set; } public string Marketplace { get; set; } = ""; public string StatusLabel { get; set; } = ""; public decimal Commission { get; set; } }

CreateMap<Order, OrderDto>()
    .ForMember(d => d.Marketplace, o => o.MapFrom(_ => "AMZ-IN"))
    .ForMember(d => d.StatusLabel, o => o.MapFrom(s => s.IsFulfilled ? "Delivered" : "Processing"))
    .ForMember(d => d.Commission, o => o.MapFrom(s => s.Amount * 0.12m));

Why teams use this: Product teams add new DTO display fields in one Profile instead of touching every API endpoint.

11. Visual understanding

Input (user, file, API)
        │
        ▼
   Fixed & Dynamic Destination Values logic in C#
        │
        ▼
   Output (console, HTTP response, file)

12. Internal working

  • Roslyn compiler checks syntax and types before your program runs.
  • CLR executes IL and provides services (GC, exceptions, threading).
  • For this lesson, focus on behavior first — runtime details matter more as apps grow.

13. Advantages

  • Readable code that new team members can follow
  • Compiler catches many mistakes before deploy
  • Huge .NET job market in India and worldwide

14. Disadvantages

  • Takes time to learn if you skip fundamentals
  • Overusing advanced features too early adds complexity

15. Best practices

  • Use meaningful names — `transferAmount` not `x`
  • Run `dotnet format` or EditorConfig for consistent style
  • Commit small examples to Git from lesson one

16. Common mistakes

  • Hard-coding MapFrom(_ => DateTime.UtcNow) when you need the database CreatedAt — map from source instead.
  • Forgetting that MapFrom runs per mapping — expensive I/O inside lambdas hurts performance.
  • Using fixed values for fields that should vary by tenant or user — inject a resolver instead.

17. Interview questions

Fixed vs dynamic?

Fixed is the same every time (currency code). Dynamic changes based on source data or runtime context.

Can I map from a service?

Yes — use IValueResolver or pass items through context using IMappingOperationOptions.Items.

Explain Fixed & Dynamic Destination Values to a non-technical teammate in 30 seconds.

Focus on the problem it solves — use a bank transfer or shopping cart analogy, not jargon.

Junior interview: give one code example using Fixed & Dynamic Destination Values.

Use the beginner example from this lesson — be able to write it on a whiteboard without looking.

What goes wrong if you misuse Fixed & Dynamic Destination Values?

Mention one mistake from the Common mistakes section and how you would fix it in a code review.

Do this on your computer

  1. Define source entity and destination DTO with extra properties
  2. In Profile, chain ForMember for each non-trivial destination field
  3. Use MapFrom(_ => constant) for fixed values
  4. Use MapFrom(s => expression) for values derived from source
  5. Call mapper.Map(product) and verify Currency and PriceLabel
  6. Read the real-world section and identify which layer (API, service, domain) uses this topic.
  7. Run dotnet build and dotnet run locally — confirm output.
  8. Change one value and predict the result before saving.

Experiments — try changing this

  • Change a number or string in the example and run again — predict output first.
  • Introduce a deliberate error (remove a semicolon) and read the compiler message.
  • Add one more item to the collection and confirm the loop runs one extra time.
  • Open dotnet docs for Fixed & Dynamic Destination Values and compare one keyword with the lesson example.

18. Summary

  • Fixed values: MapFrom(_ => "constant").
  • Dynamic from source: MapFrom(s => transform(s.Field)).
  • Runtime/di values: IValueResolver or AfterMap.
  • Keeps controllers thin — mapping rules live in Profile.

Interview prep for this lesson

Practice these questions aloud after reading—each links to a full structured answer.

Mid PDF Detailed
BFS on a graph (adjacency list)?
Short answer: void BFS(Dictionary&lt;int, List&lt;int&gt;&gt; graph, int start) { var visited = new HashSet&lt;int&gt;(); var queue = new Queue&lt;int&gt;(); queue.Enqueue(start); visited.Add(start); while (queue.Count &…
Mid PDF Detailed
foreach loop (most common)?
Short answer: List&lt;string&gt; fruits = new List&lt;string&gt; { &quot;Apple&quot;, &quot;Banana&quot; }; foreach (var fruit in fruits) { Console.WriteLine(fruit); } Example code List&lt;string&gt; fruits = new List&lt…
Mid PDF Detailed
Find the nth Fibonacci Number?
Short answer: int Fibonacci(int n) { if (n &lt;= 1) return n; int a = 0, b = 1; for (int i = 2; i &lt;= n; i++) { int temp = a + b; a = b; b = temp; } return b; } Explanation: Iterative DP approach; each Fibonacci number…
Mid PDF Detailed
Find the kth largest element in an unsorted array using Quickselect?
Short answer: public int FindKthLargest(int[] nums, int k) { return QuickSelect(nums, 0, nums.Length - 1, nums.Length - k); } private int QuickSelect(int[] nums, int left, int right, int kSmallest) { if (left == right) r…
Junior PDF Detailed
What is a List<T> in C# and when should you use it?
Short answer: List&lt;T&gt; is a generic collection in C# that represents a dynamically sized list of elements. It resides in the System.Collections.Generic namespace and grows or shrinks as needed. Use it when: You need…
Questions on this lesson 0

Sign in to ask a question or upvote helpful answers.

No questions yet — be the first to ask!

C# Programming Tutorial
Course syllabus
Module 1: Introduction & Environment Setup
Module 2: C# Basics
Module 3: Functions & Strings
Module 4: Memory & Runtime
Module 5: OOP in C#
Module 6: OOP Real-Time Examples
Module 7: Exception Handling
Module 8: Delegates, Events & Lambda
Module 9: Multithreading
Module 10: Collections & Generics
Module 11: File Handling
Module 12: Async Programming
Module 13: Parallel Programming
Module 14: AutoMapper & Advanced Features
Module 15: Advanced C# Features
Module 16: C# 7 to C# 14 Features
Module 17: Enterprise Architecture
Toolliyo Assistant
Ask about tutorials, ebooks, training, pricing, mentor services, and support. I use public site content only—not admin or internal tools.

care@toolliyo.com

Need callback? Share your details