62 lines
2.4 KiB
C#
62 lines
2.4 KiB
C#
namespace LaaProduction.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, Int32 index, Int32 orderBy = 0)
|
|
=> model.Property(expression, index, PropertyType.Text, orderBy);
|
|
|
|
public static ReportFilterProperty DateTime<T>(this T model, Expression<Func<T, Object>> expression, Int32 index, Int32 orderBy = 0)
|
|
=> model.Property(expression, index, PropertyType.Date, orderBy);
|
|
|
|
public static ReportFilterProperty Boolean<T>(this T model, Expression<Func<T, Object>> expression, Int32 index, Int32 orderBy = 0)
|
|
=> model.Property(expression, index, PropertyType.Bool, orderBy);
|
|
|
|
public static ReportFilterProperty Property<T>(this T model, Expression<Func<T, Object>> expression, Int32 index, PropertyType propertyType, Int32 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;
|
|
}
|
|
}
|
|
}
|