tgstation-server 6.19.0
The /tg/station 13 server suite
Loading...
Searching...
No Matches
ExpressionExtensions.cs
Go to the documentation of this file.
1using System;
2using System.Linq.Expressions;
3
5
7{
12 {
20 public static Expression<Func<TQueried, ProjectedPair<TQueried, TResult>>> Projected<TQueried, TResult>(this Expression<Func<TQueried, TResult>> translationExpression)
21 {
22 var parameter = Expression.Parameter(typeof(TQueried), "queried");
23 var body = Expression.Invoke(translationExpression, parameter);
24
25 var ourType = typeof(ProjectedPair<TQueried, TResult>);
26
27 var expr = Expression.MemberInit(
28 Expression.New(ourType),
29 Expression.Bind(
30 ourType.GetProperty(nameof(ProjectedPair<TQueried, TResult>.Queried))!,
31 parameter),
32 Expression.Bind(
33 ourType.GetProperty(nameof(ProjectedPair<TQueried, TResult>.Result))!,
34 body));
35
36 return Expression.Lambda<Func<TQueried, ProjectedPair<TQueried, TResult>>>(expr, parameter);
37 }
38 }
39}
DTO for moving database projected objects through the system.
Extension methods for Expression<TDelegate>s.
static Expression< Func< TQueried, ProjectedPair< TQueried, TResult > > > Projected< TQueried, TResult >(this Expression< Func< TQueried, TResult > > translationExpression)
Create an Expression<TDelegate> to transform a given TQueried into a TResult and output them as a P...