Прикрепите MethodCallExpression к свойству / параметру - PullRequest
0 голосов
/ 27 июня 2018

У меня есть следующее MethodCallExpression:

{Party.Any(party => party.Address.Any(address => address.Line1.Contains("Address 1")))}

Мне нужно, чтобы он был привязан к родительскому уровню Property / Parameter, чтобы конечная лямбда выглядела так:

{txliferequest => txliferequest.OLifE.Party.Any(party => party.Address.Any(address => address.Line1.Contains("Address 1")))}

Исходное выражение MethodCallExpression передается в метод расширения, поэтому я пытаюсь добавить окончательную лямбда-структуру.


TXLifeRequest

public partial class TXLifeRequest : BaseEntity
{
    public virtual OLifE OLifE { get; set; }

    ...
}

OLIFE

public partial class OLifE : BaseEntity
{
    public virtual List<Party> Party { get; set; }
        ...
}

Вечеринка

public class Party: BaseEntity
{
    public virtual List<Address> Address { get; set; }
    ...
}

Я пытаюсь присоединить это как средство доступа к свойству, но я не уверен, как это сделать. Вот что я пытаюсь сделать:

//{Name = "OLifE" FullName = "IMSParamed.Entities.OLifE"}
Type parentBaseType = parentPropInfo.GetListBaseType();

//{IMSParamed.Entities.OLifE OLifE}
PropertyInfo propInfo = parentBaseType.GetParentMappedPropertyInfo();

//{OLifE}
ParameterExpression parentTypeParam2 = parentPropInfo.Name.ToParameter(parentBaseType);

//{OLifE.Party}
MemberExpression typeProp = type.Name.ToProperty(parentTypeParam2);

//Type lambdaType = typeof(Func<,>).MakeGenericType(type, typeof(bool));

MethodInfo anyMethod = ExpressionBuilder.anyTSource.MakeGenericMethod(type);

//{OLifE.Party.Any(party => party.Address.Any(address => address.Line1.Contains("Address 1")))}
MethodCallExpression any = Expression.Call(anyMethod, typeProp, methodCallExp);
...