Comments (1)
Resolved using:
public sealed class NullableConverterAttribute : ValueConverterAttribute
{
/// <summary>
/// Returns <see cref="IValueConverter"/> for specific column.
/// </summary>
public override IValueConverter? GetValueConverter(ColumnDescriptor columnDescriptor)
{
if (ValueConverter is not null)
return ValueConverter;
if (ConverterType is null)
return null;
return _converter ??= BuildNullableConverter(ConverterType);
}
private sealed class NullableConverter : IValueConverter
{
public bool HandlesNulls => false;
public required LambdaExpression FromProviderExpression { get; init; }
public required LambdaExpression ToProviderExpression { get; init; }
}
private IValueConverter? _converter;
private static NullableConverter BuildNullableConverter(Type type)
{
var dynamicConverter = (IValueConverter)TypeAccessor.GetAccessor(type).CreateInstance();
var from = HandleNull(dynamicConverter.FromProviderExpression);
var to = HandleNull(dynamicConverter.ToProviderExpression);
return new NullableConverter
{
FromProviderExpression = from,
ToProviderExpression = to,
};
}
private static LambdaExpression HandleNull(
LambdaExpression lambda
)
{
var aType = typeof(Nullable<>).MakeGenericType(lambda.Parameters[0].Type);
var bType = typeof(Nullable<>).MakeGenericType(lambda.ReturnType);
var aParam = Expression.Parameter(aType, "a");
var prop = aType.GetProperty("Value");
var body = lambda.Body.Replace(
lambda.Parameters[0],
Expression.Property(aParam, prop!)
);
return Expression.Lambda(
Expression.Convert(
body,
bType
),
aParam
);
}
}
from linq2db.
Related Issues (20)
- Task-spawning code refactoring HOT 2
- WithOptions<T> looses CommandTimeout property
- Association property is null, while query is correct HOT 2
- Read some json values, Common Language Runtime detected an invalid program. HOT 5
- update documentation to show how to use fluent mapping HOT 1
- Enum Array insert/update
- Migrate table functions scaffold to `TableFromExpression`
- Default mappingschema is nog the first in the schema list HOT 4
- List of improvements for Preview 2 HOT 1
- Global Filters with Joins cause stack overflow when query cache is enabled
- Difference in resulting SQL when using LoadWith and LeftJoin HOT 1
- StringAggregate with GroupBy on SQL Server HOT 2
- DateTime not correctly handled in insert and update
- Query cache makes query filter Func irrelevant after first execution HOT 4
- Fluent mapper + expression based association fails when using generic IQueryable extension. Works when just accessing in Linq HOT 1
- Npgsql.PostgresException: '23505: duplicate key value violates unique constraint
- Unable to delete file SQLite.Interop.dll, access to the path '' is denied when trying to clean multi targeting (net472 and netstandard2.0) project HOT 1
- SQL-Server GroupBy-Query with nullable String-Key fails to create working SQL when used in an IN-Query instead of old EXISTS-Behaviour HOT 2
- Parameterization in PostgreSQL queries HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from linq2db.