Files
laatzen/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportModelExtensions.cs
T
2023-04-27 11:04:12 +02:00

62 lines
2.4 KiB
C#

namespace LaaProductionWeb.Services.Models.Reports
{
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq.Expressions;
using System.Reflection;
public static class ReportModelExtensions
{
public static ReportFilterProperty Text<T>(this T model, Expression<Func<T, object>> expression, int index, int orderBy = 0)
=> model.Property(expression, index, PropertyType.Text, orderBy);
public static ReportFilterProperty DateTime<T>(this T model, Expression<Func<T, object>> expression, int index, int orderBy = 0)
=> model.Property(expression, index, PropertyType.Date, orderBy);
public static ReportFilterProperty Boolean<T>(this T model, Expression<Func<T, object>> expression, int index, int orderBy = 0)
=> model.Property(expression, index, PropertyType.Bool, orderBy);
public static ReportFilterProperty Property<T>(this T model, Expression<Func<T, object>> expression, int index, PropertyType propertyType, int orderBy)
{
var memberInfo = default(MemberInfo);
if (expression.Body is MemberExpression memberExpression)
{
memberInfo = memberExpression.Member;
}
else if (expression.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression operandExpression)
{
memberInfo = operandExpression.Member;
}
return new ReportFilterProperty
{
Column = memberInfo?.GetCustomAttribute<ColumnAttribute>()?.Name,
Property = memberInfo?.Name,
OrderBy = orderBy,
Index = index,
Type = propertyType
};
}
public static string Display<T>(Expression<Func<T, object>> expression)
{
var memberInfo = default(MemberInfo);
if (expression.Body is MemberExpression memberExpression)
{
memberInfo = memberExpression.Member;
}
else if (expression.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression operandExpression)
{
memberInfo = operandExpression.Member;
}
return memberInfo
?.GetCustomAttribute<DisplayAttribute>()
?.Name;
}
}
}