Implement BuildSubProjection where N=3

This commit is contained in:
Jordan Dominion
2025-08-17 15:11:59 -04:00
parent 42b21ddc4d
commit cc33c2e701
@@ -123,7 +123,6 @@ namespace Tgstation.Server.Host.Models
notNullExpression1,
subOutput1Expression,
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubOutput1)));
var conditionalSubOutput2Expression = global::System.Linq.Expressions.Expression.Condition(
notNullExpression2,
subOutput2Expression,
@@ -172,7 +171,54 @@ namespace Tgstation.Server.Host.Models
where TTransformer2 : ITransformer<TSubInput2, TSubOutput2>, new()
where TTransformer3 : ITransformer<TSubInput3, TSubOutput3>, new()
{
throw new NotImplementedException();
var subTransformer1 = new TTransformer1();
var subTransformer2 = new TTransformer2();
var subTransformer3 = new TTransformer3();
var primaryInput = global::System.Linq.Expressions.Expression.Parameter(typeof(TInput), "input");
var subInput1Expression = global::System.Linq.Expressions.Expression.Invoke(subInput1SelectionExpression, primaryInput);
var subInput2Expression = global::System.Linq.Expressions.Expression.Invoke(subInput2SelectionExpression, primaryInput);
var subInput3Expression = global::System.Linq.Expressions.Expression.Invoke(subInput3SelectionExpression, primaryInput);
var notNullExpression1 = global::System.Linq.Expressions.Expression.MakeBinary(
ExpressionType.NotEqual,
subInput1Expression,
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubInput1)));
var notNullExpression2 = global::System.Linq.Expressions.Expression.MakeBinary(
ExpressionType.NotEqual,
subInput2Expression,
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubInput2)));
var notNullExpression3 = global::System.Linq.Expressions.Expression.MakeBinary(
ExpressionType.NotEqual,
subInput3Expression,
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubInput3)));
var subOutput1Expression = global::System.Linq.Expressions.Expression.Invoke(subTransformer1.Expression, subInput1Expression);
var subOutput2Expression = global::System.Linq.Expressions.Expression.Invoke(subTransformer2.Expression, subInput2Expression);
var subOutput3Expression = global::System.Linq.Expressions.Expression.Invoke(subTransformer3.Expression, subInput3Expression);
var conditionalSubOutput1Expression = global::System.Linq.Expressions.Expression.Condition(
notNullExpression1,
subOutput1Expression,
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubOutput1)));
var conditionalSubOutput2Expression = global::System.Linq.Expressions.Expression.Condition(
notNullExpression2,
subOutput2Expression,
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubOutput2)));
var conditionalSubOutput3Expression = global::System.Linq.Expressions.Expression.Condition(
notNullExpression3,
subOutput3Expression,
global::System.Linq.Expressions.Expression.Constant(null, typeof(TSubOutput3)));
var outputExpression = global::System.Linq.Expressions.Expression.Invoke(
transformerExpression,
primaryInput,
conditionalSubOutput1Expression,
conditionalSubOutput2Expression,
conditionalSubOutput3Expression);
return global::System.Linq.Expressions.Expression.Lambda<Func<TInput, TOutput>>(outputExpression, primaryInput);
}
/// <summary>