zeroframework/Services/DeviceCenter/ZeroFramework.DeviceCenter.Domain/Specifications/Builder/IncludableBuilderExtensions.cs
2023-12-05 17:22:48 +08:00

36 lines
1.7 KiB
C#

using System.Linq.Expressions;
namespace ZeroFramework.DeviceCenter.Domain.Specifications.Builder
{
public static class IncludableBuilderExtensions
{
public static IIncludableSpecificationBuilder<TEntity, TProperty> ThenInclude<TEntity, TPreviousProperty, TProperty>(
this IIncludableSpecificationBuilder<TEntity, TPreviousProperty> previousBuilder,
Expression<Func<TPreviousProperty, TProperty>> thenIncludeExpression)
where TEntity : class
{
var info = new IncludeExpressionInfo(thenIncludeExpression, typeof(TEntity), typeof(TProperty), typeof(TPreviousProperty));
((List<IncludeExpressionInfo>)previousBuilder.Specification.IncludeExpressions).Add(info);
var includeBuilder = new IncludableSpecificationBuilder<TEntity, TProperty>(previousBuilder.Specification);
return includeBuilder;
}
public static IIncludableSpecificationBuilder<TEntity, TProperty> ThenInclude<TEntity, TPreviousProperty, TProperty>(
this IIncludableSpecificationBuilder<TEntity, IEnumerable<TPreviousProperty>> previousBuilder,
Expression<Func<TPreviousProperty, TProperty>> thenIncludeExpression)
where TEntity : class
{
var info = new IncludeExpressionInfo(thenIncludeExpression, typeof(TEntity), typeof(TProperty), typeof(TPreviousProperty));
((List<IncludeExpressionInfo>)previousBuilder.Specification.IncludeExpressions).Add(info);
var includeBuilder = new IncludableSpecificationBuilder<TEntity, TProperty>(previousBuilder.Specification);
return includeBuilder;
}
}
}