Link Search Menu Expand Document

Average Type Resolver


This object is used within the BaseStatementBuilder class as a resolver of which system type to be used for conversion when calling the Average and AverageAll operations.

How to Implement?

Simply create a class that implements the IResolver.

public class AverageableTypeResolver : IResolver<Type, Type>
{
    ...
}

Then, implement the Resolve() method like below.

public Type Resolve(Type type)
{
    if (type == null)
    {
        throw new NullReferenceException("The type must not be null.");
    }

    // Get the type
    type = type?.GetUnderlyingType();

    // Only convert those numerics
    if (type == typeof(short) ||
        type == typeof(int) ||
        type == typeof(long) ||
        type == typeof(UInt16) ||
        type == typeof(UInt32) ||
        type == typeof(UInt64))
    {
        type = typeof(double);
    }

    // Return the type
    return type;
}

Usability

You have to simply pass it when inheritting the BaseStatementBuilder class.

internal sealed class OptimizedSqlServerStatementBuilder : BaseStatementBuilder
{
	public OptimizedSqlServerStatementBuilder()
        : base(DbSettingMapper.Get(typeof(SqlConnection)),
            null, // See the ConvertFieldResolver page
            new AverageableTypeResolver())
	{ }
}

Please see the Statement Builder for more information. In addition to this note, there is already an existing resolver that does the same named RepoDb.Resolvers.ClientTypeToAverageableClientTypeResolver. It can be used and inheritted immediately.