using System.Linq.Expressions; namespace ZeroFramework.DeviceCenter.Domain.Specifications { public class IncludeExpressionInfo { public LambdaExpression LambdaExpression { get; } public Type EntityType { get; } public Type PropertyType { get; } public Type? PreviousPropertyType { get; } public IncludeTypeEnum Type { get; } private IncludeExpressionInfo(LambdaExpression expression, Type entityType, Type propertyType, Type? previousPropertyType, IncludeTypeEnum includeType) { _ = expression ?? throw new ArgumentNullException(nameof(expression)); _ = entityType ?? throw new ArgumentNullException(nameof(entityType)); _ = propertyType ?? throw new ArgumentNullException(nameof(propertyType)); if (includeType == IncludeTypeEnum.ThenInclude) { _ = previousPropertyType ?? throw new ArgumentNullException(nameof(previousPropertyType)); } LambdaExpression = expression; EntityType = entityType; PropertyType = propertyType; PreviousPropertyType = previousPropertyType; Type = includeType; } public IncludeExpressionInfo(LambdaExpression expression, Type entityType, Type propertyType) : this(expression, entityType, propertyType, null, IncludeTypeEnum.Include) { } public IncludeExpressionInfo(LambdaExpression expression, Type entityType, Type propertyType, Type previousPropertyType) : this(expression, entityType, propertyType, previousPropertyType, IncludeTypeEnum.ThenInclude) { } } }