OLT.DataAdapters 10.0.0

Prefix Reserved
dotnet add package OLT.DataAdapters --version 10.0.0
                    
NuGet\Install-Package OLT.DataAdapters -Version 10.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OLT.DataAdapters" Version="10.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OLT.DataAdapters" Version="10.0.0" />
                    
Directory.Packages.props
<PackageReference Include="OLT.DataAdapters" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OLT.DataAdapters --version 10.0.0
                    
#r "nuget: OLT.DataAdapters, 10.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OLT.DataAdapters@10.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OLT.DataAdapters&version=10.0.0
                    
Install as a Cake Addin
#tool nuget:?package=OLT.DataAdapters&version=10.0.0
                    
Install as a Cake Tool

CI Quality Gate Status

OLT Adapter Resolver and adapters for IQueryable and paged results


// Inject IOltAdapterResolver 


// Checks to see if can project IQueryable
adapterResolver.CanProjectTo<PersonEntity, PersonModel>();  

//Simple Map
var person = adapterResolver.Map<PersonEntity, PersonModel>(entity, new PersonModel());


var queryable = Context.People.GetAll();
var records = adapterResolver.ProjectTo<PersonEntity, PersonModel>(queryable);

DI Configuration

Using https://www.nuget.org/packages/OLT.Utility.AssemblyScanner

var assemblies = new OltAssemblyScanBuilder()
    .IncludeFilter("OLT.", "MyApp.")
    .DeepScan()
    .ExcludeMicrosoft()
    .ExcludeNewtonsoft()
    .ExcludeAutomapper()
    .Build();

services.AddOltAdapters(opt => opt.AddAdapters(assemblies));

services.AddOltAutoMapper(opt =>
{
    opt.AddMaps(assemblies);
});

Simple Adapater

public class PersonEntityToPersonModelAdapter : OltAdapter<PersonEntity, PersonModel>
{
	public override void Map(PersonEntity source, PersonModel destination)
	{
		destination.Name = new PersonName
		{
			First = source.FirstName,
			Last = source.LastName,
		};
	}

	public override void Map(PersonModel source, PersonEntity destination)
	{
		destination.FirstName = source.Name.First;
		destination.LastName = source.Name.Last;
	}
}

Projection Adapter using IQueryable

public class PersonEntityToPersonModelQueryableAdapter : OltAdapter<PersonEntity, PersonModel>, IOltAdapterQueryable<PersonEntity, PersonModel>
{
	public PersonEntityToPersonModelQueryableAdapter()
	{
		this.WithOrderBy(p => p.OrderBy(o => o.FirstName).ThenBy(o => o.LastName));
	}

	public override void Map(PersonEntity source, PersonModel destination)
	{
		destination.Name = new PersonName
		{
			First = source.FirstName,
			Last = source.LastName,
		};
	}

	public override void Map(PersonModel source, PersonEntity destination)
	{
		destination.FirstName = source.Name.First;
		destination.LastName = source.Name.Last;
	}

	public IQueryable<PersonModel> Map(IQueryable<PersonEntity> queryable)
	{
		return queryable.Select(entity => new PersonModel
		{
			Name = new PersonName
			{
				First = entity.FirstName,
				Last = entity.LastName,
			}
		});
	}
}


Projection Adapter using IQueryable for Paging (requires Default Order By)

public class PersonEntityToPersonModelPagedAdapter : OltAdapterPaged<PersonEntity, PersonModel>
{
	public override void Map(PersonEntity source, PersonModel destination)
	{
		destination.Name = new PersonName
		{
		  First = source.FirstName,
		  Last = source.LastName,
		};
	}

	public override void Map(PersonModel source, PersonEntity destination)
	{
		destination.FirstName = source.Name?.First;
	    destination.LastName = source.Name?.Last;
	}

	public override IQueryable<PersonModel> Map(IQueryable<PersonEntity> queryable)
	{
		return queryable.Select(entity => new PersonModel
		{
			Name = new PersonName
			{
				First = entity.FirstName,
				Last = entity.LastName,
			}
		});
	}

	public override IOrderedQueryable<PersonEntity> DefaultOrderBy(IQueryable<PersonEntity> queryable)
	{
		return queryable.OrderBy(p => p.LastName).ThenBy(p => p.FirstName);
	}
}

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on OLT.DataAdapters:

Package Downloads
OLT.DataAdapters.AutoMapper

DataAdapters AutoMapper Library

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.0.0 236 12/25/2025
9.0.0 611 1/29/2025
9.0.0-beta-0015 207 12/2/2024
9.0.0-beta-0010 217 11/25/2024
9.0.0-beta-0005 122 11/24/2024
8.4.0-beta-0010 163 11/7/2024
8.4.0-beta-0005 144 10/9/2024
8.3.1 2,039 8/26/2024
8.3.1-beta-0005 187 8/21/2024
8.3.0 258 8/9/2024
8.3.0-beta-0015 165 6/3/2024
8.3.0-beta-0010 181 5/13/2024
8.3.0-beta-0005 170 5/10/2024
8.2.1 844 4/22/2024
8.2.0 482 4/8/2024
8.1.0 344 3/10/2024
8.0.0 2,587 2/21/2024
8.0.0-beta-0030 638 2/19/2024
8.0.0-beta-0025 677 1/15/2024
8.0.0-beta-0020 245 1/15/2024
8.0.0-beta-0015 317 12/29/2023
8.0.0-beta-0010 344 12/20/2023
8.0.0-beta-0005 320 12/9/2023
7.2.0 543 12/8/2023
7.2.0-beta-0007 292 12/8/2023
7.2.0-beta-0005 286 12/8/2023
7.1.0 465 10/23/2023
7.1.0-beta-0015 350 7/28/2023
7.1.0-beta-0013 368 6/28/2023
7.1.0-beta-0011 315 6/25/2023
7.1.0-beta-0006 332 6/24/2023
7.1.0-beta-0003 329 6/24/2023
7.1.0-beta-0002 355 6/24/2023
7.1.0-beta-0001 371 5/31/2023
7.0.3 491 9/25/2023
7.0.2 418 7/27/2023
7.0.1 457 7/26/2023
7.0.0 894 4/20/2023
7.0.0-beta-0010 385 4/5/2023
7.0.0-beta-0008 355 2/26/2023
7.0.0-beta-0005 405 2/12/2023
7.0.0-beta-0003 413 1/29/2023
7.0.0-beta-0001 373 1/29/2023
6.8.0 1,168 2/11/2023
6.8.0-beta-0003 338 2/11/2023
6.8.0-beta-0001 405 1/29/2023
6.7.2 812 1/29/2023
6.7.1 1,590 12/20/2022
6.7.0 881 12/17/2022
6.6.0 1,079 12/2/2022
6.5.4 1,117 11/23/2022
6.5.3 1,000 11/23/2022
6.5.2 1,072 11/14/2022
6.5.1 1,394 10/19/2022
6.5.0 1,319 10/3/2022
6.4.3 1,268 9/28/2022
6.4.2 1,289 9/26/2022
6.4.1 1,354 9/18/2022
6.4.0 1,349 8/31/2022
6.3.5 1,310 8/12/2022
6.3.4 1,550 7/25/2022
6.3.3 1,438 7/22/2022
6.3.2 1,389 7/11/2022
6.3.1 1,471 7/2/2022
6.3.0 1,356 7/1/2022
6.2.1 1,621 6/15/2022
6.2.0 1,372 6/2/2022
6.1.1 1,495 5/12/2022
6.1.0 1,532 5/1/2022
6.0.6 1,416 4/6/2022
6.0.5 1,314 4/4/2022
6.0.4 1,292 4/2/2022
6.0.3 1,277 4/1/2022
6.0.2 1,278 3/31/2022
6.0.1 1,260 3/25/2022
6.0.0 1,315 3/24/2022
6.0.0-beta-0035 529 3/17/2022
6.0.0-beta-0030 533 3/15/2022
6.0.0-beta-0025 531 3/14/2022
6.0.0-beta-0006 448 3/6/2022
6.0.0-beta-0005 500 2/28/2022
6.0.0-beta-0004 442 2/28/2022
6.0.0-beta-0003 426 2/27/2022
6.0.0-beta-0001 461 2/25/2022
5.8.0 1,448 2/15/2022
5.7.0 1,440 1/26/2022
5.6.0 896 12/7/2021
5.5.0 1,177 12/4/2021
5.4.2 6,434 11/24/2021
5.4.1 972 11/17/2021
5.4.0 916 11/15/2021
5.3.3 977 11/9/2021
5.3.2 1,028 11/5/2021
5.3.1 1,063 10/28/2021
5.3.0 1,050 9/22/2021
5.2.6 1,009 9/16/2021
5.2.5 1,047 9/13/2021
5.2.4 1,003 9/3/2021
5.2.3 1,026 8/31/2021
5.2.2 1,026 8/27/2021
5.2.1 992 8/25/2021
5.2.0 1,062 8/15/2021